以下面的例子为例……
Using cn As New SqlConnection(ConnectionString) Try Dim cmd As SqlCommand = New SqlCommand With cmd .Connection = cn .Connection.Open() .CommandText = "dbo.GetCustomerByID" .CommandType = CommandType.StoredProcedure .Parameters.Add("@CustomerID",SqlDbType.Int,4) .Parameters("@CustomerID").Value = CustomerID End With da = New SqlDataAdapter(cmd) da.Fill(ds,"Customer") Catch ex As Exception End Try End Using
根据我今天的研究,听起来好像这基本上还可以,但是SqlCommand没有被处理掉.
问题 – >以下哪个例子是处理这个问题的最佳方法?
示例2 – 手动处理
Using cn As New SqlConnection(ConnectionString) Try Dim cmd As SqlCommand = New SqlCommand With cmd .Connection = cn .Connection.Open() .CommandText = "dbo.GetCustomerByID" .CommandType = CommandType.StoredProcedure .Parameters.Add("@CustomerID",4) .Parameters("@CustomerID").Value = CustomerID End With da = New SqlDataAdapter(cmd) cmd.Dispose() da.Fill(ds,"Customer") Catch ex As Exception End Try End Using
示例3 – 使用Using语句自动处理
Using cn As New SqlConnection(ConnectionString) Try Using cmd As New SqlCommand With cmd .Connection = cn .Connection.Open() .CommandText = "dbo.GetCustomerByID" .CommandType = CommandType.StoredProcedure .Parameters.Add("@CustomerID",4) .Parameters("@CustomerID").Value = CustomerID End With da = New SqlDataAdapter(cmd) da.Fill(ds,"Customer") End Using Catch ex As Exception End Try End Using
示例4 – 与示例3相同,但Try / Catch在使用中 – 这是否有所不同?
Using cn As New SqlConnection(ConnectionString) Using cmd As New SqlCommand Try With cmd .Connection = cn .Connection.Open() .CommandText = "dbo.GetCustomerByID" .CommandType = CommandType.StoredProcedure .Parameters.Add("@CustomerID","Customer") Catch ex As Exception End Try End Using End Using
示例5 – 与示例4相同,但CommandText和cn在Using语句中指定 – 这有什么优势?
Using cn As New SqlConnection(ConnectionString) Using cmd As New SqlCommand("GetCustomerByID",cn) Try With cmd .Connection.Open() .CommandType = CommandType.StoredProcedure .Parameters.Add("@CustomerID","Customer") Catch ex As Exception End Try End Using End Using
示例6 – 与示例5相同,但是在cn而不是cmd上打开连接.如果只执行一个存储过程,是否最好在cmd上打开连接?
Using cn As New SqlConnection(ConnectionString) cn.Open() Using cmd As New SqlCommand("GetCustomerByID",cn) Try With cmd .Connection = cn .CommandType = CommandType.StoredProcedure .Parameters.Add("@CustomerID","Customer") Catch ex As Exception End Try End Using End Using
DataAdapter.Fill命令将打开和关闭连接本身,因此您不需要cmd.Connection.Open(). (参考:
http://msdn.microsoft.com/en-us/library/377a8x4t.aspx的备注部分.)
使用Using for SqlConnection可以为你调用.Close.
变量cmd一旦超出范围就变得有资格进行垃圾收集(如果.NET确定它不会再次使用,则更早).
在你的例子2中,我不确定在DataAdapter使用它之前处理cmd是个好主意.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。