В соответствии с моим другим вопросом об одноразовых объектах , следует ли вызывать Close () перед концом блока using?
using (SqlConnection connection = new SqlConnection())
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "INSERT INTO YourMom (Amount) VALUES (1)";
command.CommandType = System.Data.CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
// Is this call necessary?
connection.Close();
}
c#
asp.net
using
sqlconnection
sqlcommand
Джон Бубриски
источник
источник
Разборка SqlConnection с использованием .NET Reflector :
Он вызывает Close () внутри Dispose ()
источник
Ключевое слово using правильно закроет соединение, поэтому дополнительный вызов Close не требуется.
Из статьи MSDN о пуле подключений SQL Server :
Фактическая реализация SqlConnection.Dispose с использованием .NET Reflector выглядит следующим образом:
источник
Используя Reflector , вы можете увидеть, что
Dispose
методSqlConnection
действительно вызываетClose()
;источник
Нет, вызов Dispose () в SqlConnection также вызывает Close ().
MSDN - SqlConnection.Dispose ()
источник
Нет, блокировка Using
Dispose()
все равно вызывает вас, поэтому в этом нет необходимостиClose()
.источник
Dispose()
звонкиClose()
, а не наоборот?Нет, нет необходимости закрывать соединение перед вызовом Dispose.
Некоторые объекты (например, SQLConnections) можно повторно использовать после вызова Close, но не после вызова Dispose. Для других объектов вызов Close аналогичен вызову Dispose. (ManualResetEvent и Streams, я думаю, ведут себя так)
источник
Нет, класс SqlConnection наследуется от IDisposable, и когда обнаруживается конец использования (для объекта подключения), он автоматически вызывает Dispose для класса SqlConnection.
источник