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 は、IDisposable を実装する DbCommand を継承しています。
次のことを行うコードを見ていますが、暗黙のカーソルが閉じられないという問題があります。
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
これはリソースをリークしますか?