根据 OracleClient.OracleCommand 的 MSDN 文档:
Public Sub ReadMyData(ByVal connectionString As String)
Dim queryString As String = "SELECT EmpNo, DeptNo FROM Scott.Emp"
Using connection As New OracleConnection(connectionString)
Dim command As New OracleCommand(queryString, connection)
connection.Open()
Dim reader As OracleDataReader = command.ExecuteReader()
Try
While reader.Read()
Console.WriteLine(reader.GetInt32(0) & ", " _
& reader.GetInt32(1))
End While
Finally
' always call Close when done reading.
reader.Close()
End Try
End Using
End Sub
OracleCommand 未包装在 Using 块中。
问:应该吗?OracleCommand 继承自 DbCommand,后者实现了 IDisposable。
我正在查看执行以下操作的代码,并且我们遇到了隐式游标未关闭的问题:
Dim cmd As OracleCommand = createCommand("some sql")
ds = GetDataSet(cmd)
cmd.Dispose()
cmd = Nothing
GetDataSet 看起来像:
Dim da As New OracleDataAdapter()
Dim ds As New DataSet()
Using conn As OracleConnection = GetOpenConnection()
cmd.Connection = conn
da.SelectCommand = cmd
da.Fill(ds, 0)
cmd.Connection = Nothing
End Using
da.Dispose()
da = Nothing
Return ds
这会不会泄露资源?