有没有办法强制SqlDataReader
抛出异常?似乎存在一个非常有问题的行为,其中SqlDataReader
将有一个异常并导致它所处的函数过早结束而不抛出异常,特别是当它试图读取isDBNull
值时。
(2013年5月10日)编辑:进一步思考,看起来Microsoft.VisualBasic.CompilerServices.Conversions
的行为正在默默地捕捉异常。
显然,只有在调试时才会发生异常静音 - 我运行了一个发布版本,并且异常肯定在那里浮出水面。所以它只是Visual Studio调试的一个属性。
(2013/5/14)EDIT2:在没有try / catch块行为且SqlDataReader索引与列名不匹配的情况下,在debug中发现了类似的捕获。 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'类型无效。” 来源= “Microsoft.VisualBasic程序” 堆栈跟踪: 在Microsoft.VisualBasic.CompilerServices.Conversions.ToDate(Object Value) 位于C:\ Users \ me \ Documents \ Visual Studio 2008 \ VS 2008 Projects \ General \ DataAccess \ DataAccess \ MyDAO.vb:line 603中的DataAccess.MyDAO.GetData() InnerException: