我在ASP.NET(VB)开发的项目添加了一个Module,里面写了个ExeSQL,负责执行SQL语句的函数
要如何优化呢?这种通用的函数是放在Module中好,还是放在Class中呀?
Public Function ExeSQL(ByVal strSQL As String) As DataSet
Dim TmpDs As DataSet
Dim Da As SqlDataAdapter
Dim Cn As SqlConnection If strSQL.Trim = "" Then Exit Function
Try
Cn = New SqlConnection(CnStr)
Cn.Open()
Da = New SqlDataAdapter(strSQL, Cn)
TmpDs = New DataSet
Da.Fill(TmpDs) If TmpDs Is Nothing Then
Return Nothing
Else
Return TmpDs
End If
Catch ex As Exception
AppException.LogError("ExeSQL:" & strSQL & "------" & ex.Message)
Return Nothing
Finally
Cn.Close()
Cn.Dispose()
Cn = Nothing
Da.Dispose()
Da = Nothing
TmpDs.Dispose()
TmpDs = Nothing
End Try
End Function
如果我不在Finally中加入如下语句,.NET会不会在执行这个ExeSQL后,把里面的DA,CN对象都释放干净?
要如何优化呢?这种通用的函数是放在Module中好,还是放在Class中呀?
Public Function ExeSQL(ByVal strSQL As String) As DataSet
Dim TmpDs As DataSet
Dim Da As SqlDataAdapter
Dim Cn As SqlConnection If strSQL.Trim = "" Then Exit Function
Try
Cn = New SqlConnection(CnStr)
Cn.Open()
Da = New SqlDataAdapter(strSQL, Cn)
TmpDs = New DataSet
Da.Fill(TmpDs) If TmpDs Is Nothing Then
Return Nothing
Else
Return TmpDs
End If
Catch ex As Exception
AppException.LogError("ExeSQL:" & strSQL & "------" & ex.Message)
Return Nothing
Finally
Cn.Close()
Cn.Dispose()
Cn = Nothing
Da.Dispose()
Da = Nothing
TmpDs.Dispose()
TmpDs = Nothing
End Try
End Function
如果我不在Finally中加入如下语句,.NET会不会在执行这个ExeSQL后,把里面的DA,CN对象都释放干净?
第二个问题中在finally内cn.close()肯定是要的,别的释放资源的一般也需要,.net的资源释放只有在页面迁移的时候才会发生,而你这里是一个通用类,不能保证及时的页面迁移。