С dbDataReaders и "Using" вам все еще нужно вызывать Close?
Хорошо, если я помещаю dbDataReader в оператор "Using", мне все равно нужно явно вызвать dbDataReader.Close. В документации.net говорится, что "Использование" соединения автоматически закрывает его. В приведенном ниже примере из MSDN он показывает dbDataReader без "Using" и явно закрывает его:
Public Sub ReadData(ByVal connectionString As String)
Dim queryString As String = _
"SELECT OrderID, CustomerID FROM Orders"
Using connection As New OdbcConnection(connectionString)
Dim command As New OdbcCommand(queryString, connection)
connection.Open()
Dim reader As OdbcDataReader
reader = command.ExecuteReader()
' Always call Read before accessing data.
While reader.Read()
Console.WriteLine(reader.GetInt32(0) & ", " & reader.GetString(1))
End While
' Always call Close when done reading.
reader.Close()
End Using
End Sub
Так разве это не чище и эффективнее?
Public Sub ReadData(ByVal connectionString As String)
Dim queryString As String = _
"SELECT OrderID, CustomerID FROM Orders"
Using connection As New OdbcConnection(connectionString)
Using command As New OdbcCommand(queryString, connection)
connection.Open()
Using reader = command.ExecuteReader()
' Always call Read before accessing data.
While reader.Read()
Console.WriteLine(reader.GetInt32(0) & ", " & reader.GetString(1))
End While
End Using
End Using
End Using
End Sub
И тогда вам не нужно явно вызывать.Close on Reader?
заранее спасибо
3 ответа
В используемом вами фрагменте кода вам не нужно явно вызывать.Close on the reader. Тем не менее, это хорошая привычка. Явно закройте ридер и соединение, как только вы закончите их использовать.
Для меня лучшая практика не является
Попробуйте, поймать, наконец, обработать любые исключения SQL
SqlConnection sqlConnRW = new SqlConnection(sqlConnStringLibDef);
try
{
sqlConnRW.Open();
SqlCommand sqlCmd = sqlConnRW.CreateCommand();
sqlCmd.CommandText = "select column from table";
SqlDataReader rdr = sqlCmd.ExecuteReader();
while (rdr.Read())
{ }
rdr.Close();
}
catch (SqlException Ex)
{
Debug.WriteLine(Ex.Message);
Debug.WriteLine(Ex.Number);
}
finally
{
sqlConnRW.Close();
}
Close
на 100% избыточно Dispose
, using
звонки Dispose
безопасным способом. Просто всегда вкладывайте свои ресурсы в using
блок. Это сделано для этого. Это безопасно по конструкции. Это легко проверить и сразу увидеть, что это правильно.
Не нужно звонить Close
, Это избыточно и сбивает с толку. Просто всегда следуйте using
привычка, если можешь.
Обработка ресурсов в C# и VB.NET очень проста. Просто используйте using
!
Если вам требуется обработка ошибок, просто добавьте try-catch
внутри или снаружи using
,