因此,由于某种原因,我的TRY CATCH没有捕获SQL Server存储过程抛出的异常。 基本上,我执行一个过程,它完成它所需要的或引发错误。需要在VB应用程序中捕获并引发此错误。 我究竟做错了什么?是的,SQL确实会抛出错误......
Public Function InsertDetails(ByVal dBillingDate As Date) As Boolean
Dim result As Boolean = False
Dim bReturn As Boolean = True
Try
CleanUp(ObjCmd)
ObjCmd = UpgradeHelpers.DB.AdoFactoryManager.GetFactory().CreateCommand()
ObjCmd.CommandText = "usp_InsAfterHours"
ObjCmd.CommandType = CommandType.StoredProcedure
ObjCmd.CommandTimeout = 0
ObjCmd.Connection = SQLServerDB
'Get the parameters from the sproc
ParametersHelper.DeriveParameters(ObjCmd, UpgradeHelpers.DB.AdoFactoryManager.GetFactory())
With ObjCmd.Parameters
ObjCmd.Parameters(1).Value = dBillingDate
End With
ObjCmd.ExecuteNonQueryAsync()
Do While ObjCmd.Connection.State = ConnectionState.Executing
LoopSet = ""
Loop
Catch ex As Exception
If (TypeOf ex Is OleDb.OleDbException) Then
RaiseError(DirectCast(ex, OleDb.OleDbException).ErrorCode, Me.GetType().Name & ".InsertDetails", ex, DirectCast(ex, OleDb.OleDbException).Errors, g.sDatabaseUserName)
Else
RaiseError(CInt(ex.HResult), Me.GetType().Name & ".InsertDetails", ex, , g.sDatabaseUserName)
End If
bReturn = False
Finally
CleanUp(ObjCmd)
result = bReturn
End Try
Return result
End Function
答案 0 :(得分:2)
我建议做一些改变:
您不是在等待功能完成:
await ObjCmd.ExecuteNonQueryAsync()
然后删除正在进行检查的循环。
使用该命令抛出异常,而不是RaiseError。
Throw new ApplicationException(Me.GetType().Name & ".InsertDetails", ex)
然后,您的调用者代码可以使用ex.GetBaseException()来获取错误列表等信息,假设ex.GetBaseException()。Type是Ole Exception
理想情况下,您希望将System.Data.SqlClient而不是System.Data.OleDb用于连接到.NET Framework中的SQL Server的对象。