0

有没有办法强制SqlDataReader抛出异常?它似乎有一个非常有问题的行为,其中SqlDataReader会出现异常并导致它所在的函数过早结束而不会引发异常,特别是当它尝试读取isDBNull值时。

(2013 年 5 月 10 日) 编辑:进一步思考,它的行为似乎Microsoft.VisualBasic.CompilerServices.Conversions是默默地捕捉到异常。

显然,异常压制仅在调试时发生——我运行了一个发布版本,异常肯定在那里浮出水面。所以它显然只是 Visual Studio 调试的一个属性。

(2013 年 5 月 14 日) EDIT2:在调试中发现类似的捕获,但没有 try/catch 块行为,SqlDataReader 索引与列名不匹配。IndexOutOfRangeException 仅在使用“中断所有异常”调试设置时出现。

更多细节:

Public Function GetData() As DataObj
    Dim sqlConn As New SqlConnection(ConnectionSettings.DBCon)
    Dim sqlCommand As New SqlCommand("an_sp", sqlConn)
    Dim sqlReader As SqlDataReader
    Dim dataObject As New DataObj

    sqlCommand.CommandType = CommandType.StoredProcedure

    sqlCommand.Connection.Open()
    sqlReader = sqlCommand.ExecuteReader

    While sqlReader.Read
        With dataObject
            'Exception thrown here in debugging
            .DateField = sqlReader("DateField")

        End With
    End While

    Return dataObject
End Function

System.InvalidCastException 发生 Message="从类型 'DBNull' 到类型 'Date' 的转换无效。" Source="Microsoft.VisualBasic" StackTrace: 在 Microsoft.VisualBasic.CompilerServices.Conversions.ToDate(Object Value) 在 C:\Users\me\Documents\Visual Studio 2008\VS 2008 Projects\General 中的 DataAccess.MyDAO.GetData() \DataAccess\DataAccess\MyDAO.vb:第 603 行内部异常:

4

0 回答 0