Selon la documentation MSDN pour la OracleClient.OracleCommand:commande OracleClient - les meilleures pratiques autour de l'utilisation et l'élimination de commande
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 n'est pas englobés dans un bloc utilisant.
Question: Devrait-il être? OracleCommand hérite de DbCommand, qui implémente IDisposable.
Je regarde le code qui fait ce qui suit, et nous avons des problèmes avec les curseurs implicites ne se fermés:
Dim cmd As OracleCommand = createCommand("some sql")
ds = GetDataSet(cmd)
cmd.Dispose()
cmd = Nothing
GetDataSet ressemble:
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
Est-ce que ça va ressources de fuite?
Mais selon le code MSDN, ce n'est pas nécessaire. Et si j'ai un bloc Using cmd = new OracleCommand(), ai-je besoin de le fermer explicitement? – chris
La suppression d'une commande ne signifie pas que la connexion associée est fermée. Rappelez-vous qu'une connexion peut être utilisée par plusieurs commandes. – Rad
@Conrad C'est faux. L'utilisation de l'instruction est la pratique la plus connue car elle implémente l'interface IDisposable. En outre, en utilisant Close() est un code gonflé comme si l'utilisation est utilisée ou en appelant Dispose(), la méthode Dispose implicitement TOUJOURS appelle la méthode Close(). –