这个
Close()
电话在电话亭里
Finally
布洛克,你没事。现代代码倾向于
Using
conn = Nothing
行在VB.Net中一点帮助都没有(在VB6/VBScript中需要它,但已经没有了),但是您所拥有的应该是可以的。你也不需要打电话
conn.Open()
Fill()
方法。
这个
最可怕的
对我来说就是要求
commandText
字符串,无法接受单独的参数数据。这实际上迫使您在其他代码中构建非常不安全的SQL字符串,或者仍然鼓励将其作为处理SQL的默认方法,即使
Overloads
我自己的数据方法倾向于
需要通过
SqlParameter
我也倾向于将此方法构建为
,然后在其中为每个现有查询公开方法。如果您有许多查询,这也可能是一个
Friend
方法,因此您有几个类或模块将查询组织到逻辑组中。
Private Overloads Function getDataSet(ByVal commandText As String, parameters As SqlParameter(), Optional ByVal tableName As String = "") As DataSet
Dim result As New DataSet
Using conn As New SqlConnection(myConnStr), _
cmd As New SqlCommand(commandText, conn), _
da As New SqlDataAdapter(cmd)
cmd.CommandTimeout = 30
If parameters IsNot Nothing AndAlso parameters.Length > 0 Then
cmd.Parameters.AddRange(parameters)
End If
If String.IsNullOrWhitespace(tableName) Then tableName = "Table1"
da.Fill(result, tableName)
End Using
Return result
End Function
我还移除了Catch块,因为它所做的另一件事是重新抛出一个与您已经拥有的类似的异常。您将丢失CommandText,但是如果您为每个查询使用专用方法并使用参数化查询(如其他地方所建议的),那么CommandText中很少有您无法直接从堆栈跟踪中获得的信息。