2017-10-12 78 views
0

我正在将旧的VB6应用程序重新加入到VB.NET中,我想提高代码质量。 无法找到ADODB.RecordSet的良好API文档,无论Open()和Close()方法是否抛出异常。我应该在Try/Catch块中包装ADODB.RecordSet.Open/Close方法吗?

使用时,我应该在Try/Catch块中包装这两种方法吗?他们是否会抛出一些异常?

但逻辑上他们应该抛出异常,因为两者都访问数据库是外部资源。

+1

是的,他们会抛出异常。所有的ADO方法都可以。 – GSerg

+1

我建议在一个无害的环境下进行尝试(如果行为不像你期望的那样,它不会造成任何“永久性”伤害)。 –

+2

包装打开是好的,dbase射击到地狱,发生。关闭,呃,你将如何处理这个问题?不要这样做。 –

回答

0

是的,我包装了我的代码,它工作得很好。我制作了这样的实用功能:

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 
相关问题