■84927 / inTopicNo.1) |
OracleCommandについてDispose |
□投稿者/ yapii (4回)-(2017/08/24(Thu) 10:55:12)
|
分類:[.NET 全般]
マイクロソフトの下記サイトで、以下のようなコードの記載がありました。
https://msdn.microsoft.com/ja-jp/library/system.data.oracleclient.oraclecommand(v=vs.110).aspx
OracleCommandについてDisposeをしていないのですが、
OracleCommandはDispose不要なのでしょうか?
不要であればその理由をご教授ください。
またreaderもcloseはしていますが、disposeはしていません。
readerもcloseされていれば、disposeは不要でしょうか?
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のDisposeを呼んでおいたほうが良い場合、
複数のOracleCommandを使用すると可読性が悪くなります。
書き方のコツがあればご教授ください。
Public Sub ReadMyData2(ByVal connectionString As String, flg As Boolean)
Dim cmd1 As OracleCommand = Nothing
Dim cmd2 As OracleCommand = Nothing
…cmd3, cmd4
Try
'コマンド1
Dim queryString1 As String = "SELECT * FROM Table1 WHERE Field1 = :Field1 And Field2 = :Field2"
cmd1 = New OracleCommand(queryString1)
cmd1.Parameters.Add("Field1", 12345)
cmd1.Parameters.Add("Field2", "12345")
'コマンド2 ※条件により使用しない※
If flg Then
Dim queryString2 As String = "SELECT * FROM Table2 WHERE Field1 = :Field1 And Field2 = :Field2"
cmd2 = New OracleCommand(queryString1)
cmd2.CommandText = queryString2
cmd2.Parameters.Add("Field1", 99999)
cmd2.Parameters.Add("Field2", "99999")
End If
Using connection As New OracleConnection(connectionString)
connection.Open()
Try
'コマンド1実行
Using reader As OracleDataReader = cmd1.ExecuteReader()
While reader.Read()
Console.WriteLine(reader.GetInt32(0) & ", " & reader.GetInt32(1))
End While
reader.Close()
End Using 'reader
'コマンド2実行 ※条件により実行しない※
If cmd2 IsNot Nothing Then
Using reader As OracleDataReader = cmd2.ExecuteReader()
While reader.Read()
Console.WriteLine(reader.GetInt32(0) & ", " & reader.GetInt32(1))
End While
reader.Close()
End Using 'reader
End If
Finally
connection.Close()
End Try
End Using 'connection
Finally
If cmd1 IsNot Nothing Then cmd1.Dispose()
If cmd2 IsNot Nothing Then cmd2.Dispose()
End Try
End Sub
|
|