В соответствии с документацией MSDN для OracleClient.OracleCommand:
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
Это приведет к утечке ресурсов?