cw_*_*dev 9 vb.net dispose sqlcommand using-statement
以下面的例子为例......
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
Run Code Online (Sandbox Code Playgroud)
根据我今天的研究,听起来好像这基本上还可以,但是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", SqlDbType.Int, 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
Run Code Online (Sandbox Code Playgroud)
示例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", SqlDbType.Int, 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
Run Code Online (Sandbox Code Playgroud)
示例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", 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
End Using
Run Code Online (Sandbox Code Playgroud)
示例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", 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
End Using
Run Code Online (Sandbox Code Playgroud)
示例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", 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
End Using
Run Code Online (Sandbox Code Playgroud)
DataAdapter.Fill命令将打开和关闭连接本身,因此您不需要cmd.Connection.Open().(参考:http : //msdn.microsoft.com/en-us/library/377a8x4t.aspx中的备注部分.)
使用Using了具有SqlConnection的调用的效果.Close就可以了你.
cmd一旦变量超出范围,变量就有资格进行垃圾收集(如果.NET确定它不会再次使用,则变量更早).
在你的例子2中,我不确定在DataAdapter使用它之前处理cmd是个好主意.
[来自用户"JefBar Software Services"的信息我应该在SQLCommand对象上调用Dispose吗?]在编写本文时,由于其构造函数中的代码,调用.Disposean SqlCommand无效:
public SqlCommand() : base() {
GC.SuppressFinalize(this);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31852 次 |
| 最近记录: |