请从以下网页查看以下代码:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand(v=vs.110).aspx
Public Sub ReadOrderData(ByVal connectionString As String)
Dim queryString As String = _
"SELECT OrderID, CustomerID FROM dbo.Orders;"
Using connection As New SqlConnection(connectionString)
Dim command As New SqlCommand(queryString, connection)
connection.Open()
Dim reader As SqlDataReader = command.ExecuteReader()
Try
While reader.Read()
Console.WriteLine(String.Format("{0}, {1}", _
reader(0), reader(1)))
End While
Finally
' Always call Close when done reading.
reader.Close()
End Try
End Using
End Sub
SQLCommand对象未包含在Using语句中。但是,此问题中的代码(例如)是:SqlCommand with using statement
我看到很多代码包含未包含在Using语句中的数据读取器和命令。命令和数据读取器实现IDisposable。你必须将它们包装在Using statements / call .dispose?
中我的一个想法是,当它们链接到的连接被释放时,DataReaders和Commands会被隐式关闭。这是对的吗?
答案 0 :(得分:2)
处理连接时,数据读取器和命令不会关闭或处理。它们不可用,因为它们引用了不再活动的连接。
离开它们而不进行处理不会对数据库施加任何压力,但这会给垃圾收集器带来更多的工作。
当处理对象时,它们将从终结器队列中删除,以便垃圾收集器可以一次性删除它们。
如果不进行处理,垃圾收集器首先必须将它们移动到可释放队列,后台线程将逐个调用它们上的Finalize
方法。之后,垃圾收集器可以删除它们。
答案 1 :(得分:-1)
您应始终使用Using
语句。
你会在互联网上看到很多破碎的代码。