我应该在 Try/Catch 块中包装 ADODB.RecordSet.Open/Close 方法吗?
Should I wrap ADODB.RecordSet.Open/Close methods in Try/Catch block?
我正在将旧的 VB6 应用程序改造成 VB.NET,我想提高代码质量。
我找不到关于 ADODB.RecordSet Open() 和 Close() 方法是否抛出异常的好的 API 文档。
使用的时候,这两个方法是不是应该包在Try/Catch块中?他们会抛出一些异常吗?
但从逻辑上讲,它们应该抛出异常,因为两者都在访问作为外部资源的数据库。
是的,我确实包装了我的代码,它工作得很好。我做了这样的实用函数:
Public Sub CloseRecordSet(ByRef recordSet As ADODB.Recordset)
Try
If recordSet.State = ADODB.ObjectStateEnum.adStateOpen Then
recordSet.Close()
End If
Catch ex As Exception
Dim funcName As String = System.Reflection.MethodInfo.GetCurrentMethod().Name
SV_DZS_Utils.PrintToConsole(funcName & ": " & ex.Message & ", Source: " & ex.Source & ", StackTrace: " & ex.StackTrace)
Finally
recordSet = Nothing
End Try
End Sub
Public Sub OpenRecordSetForwardReadOnly(ByRef recordSet As ADODB.Recordset, ByVal sql As String, ByRef dbConn As ADODB.Connection)
Try
recordSet.Open(sql, dbConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, ADODB.CommandTypeEnum.adCmdText)
Catch ex As Exception
Dim funcName As String = System.Reflection.MethodInfo.GetCurrentMethod().Name
SV_DZS_Utils.PrintToConsole(funcName & ": " & ex.Message & ", Source: " & ex.Source & ", StackTrace: " & ex.StackTrace)
End Try
End Sub
Public Sub OpenRecordSetDynamic(ByRef recordSet As ADODB.Recordset, ByVal sql As String, ByRef dbConn As ADODB.Connection)
Try
recordSet.Open(sql, dbConn, ADODB.CursorTypeEnum.adOpenDynamic, , ADODB.CommandTypeEnum.adCmdText)
Catch ex As Exception
Dim funcName As String = System.Reflection.MethodInfo.GetCurrentMethod().Name
SV_DZS_Utils.PrintToConsole(funcName & ": " & ex.Message & ", Source: " & ex.Source & ", StackTrace: " & ex.StackTrace)
End Try
End Sub
我正在将旧的 VB6 应用程序改造成 VB.NET,我想提高代码质量。 我找不到关于 ADODB.RecordSet Open() 和 Close() 方法是否抛出异常的好的 API 文档。
使用的时候,这两个方法是不是应该包在Try/Catch块中?他们会抛出一些异常吗?
但从逻辑上讲,它们应该抛出异常,因为两者都在访问作为外部资源的数据库。
是的,我确实包装了我的代码,它工作得很好。我做了这样的实用函数:
Public Sub CloseRecordSet(ByRef recordSet As ADODB.Recordset)
Try
If recordSet.State = ADODB.ObjectStateEnum.adStateOpen Then
recordSet.Close()
End If
Catch ex As Exception
Dim funcName As String = System.Reflection.MethodInfo.GetCurrentMethod().Name
SV_DZS_Utils.PrintToConsole(funcName & ": " & ex.Message & ", Source: " & ex.Source & ", StackTrace: " & ex.StackTrace)
Finally
recordSet = Nothing
End Try
End Sub
Public Sub OpenRecordSetForwardReadOnly(ByRef recordSet As ADODB.Recordset, ByVal sql As String, ByRef dbConn As ADODB.Connection)
Try
recordSet.Open(sql, dbConn, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly, ADODB.CommandTypeEnum.adCmdText)
Catch ex As Exception
Dim funcName As String = System.Reflection.MethodInfo.GetCurrentMethod().Name
SV_DZS_Utils.PrintToConsole(funcName & ": " & ex.Message & ", Source: " & ex.Source & ", StackTrace: " & ex.StackTrace)
End Try
End Sub
Public Sub OpenRecordSetDynamic(ByRef recordSet As ADODB.Recordset, ByVal sql As String, ByRef dbConn As ADODB.Connection)
Try
recordSet.Open(sql, dbConn, ADODB.CursorTypeEnum.adOpenDynamic, , ADODB.CommandTypeEnum.adCmdText)
Catch ex As Exception
Dim funcName As String = System.Reflection.MethodInfo.GetCurrentMethod().Name
SV_DZS_Utils.PrintToConsole(funcName & ": " & ex.Message & ", Source: " & ex.Source & ", StackTrace: " & ex.StackTrace)
End Try
End Sub