ADO.NET: ExecuteScalar автоматически закрывает соединение?

Закрывает ли ExecuteScalar соединение автоматически?


person Rookian    schedule 12.07.2010    source источник


Ответы (3)


Нет, вам нужно явно открывать и закрывать соединение при использовании ExecuteScalar().

person DCNYAM    schedule 12.07.2010

Вы можете создать перегрузку, используя метод расширения, хотя я не уверен, что это хорошая идея.

public static object ExecuteScalar(this IDbCommand Command, bool CloseConnetion)
{

    (if Command == null)
        throw new NullReferenceException();

    object obj = null;

    try
    {
      obj = Command.ExecuteScalar();        
    }
    finally
    {
      if(CloseConnection && Command.Connection.State != ConnectionState.Closed)
        Command.Connection.Close();    
    }

    return obj;
}
person Rodrick Chapman    schedule 12.07.2010
comment
это выглядит красиво, но я могу разрабатывать только для .NET 2.0 =) - person Rookian; 12.07.2010
comment
@Rookian, поскольку методы расширения — это просто методы статического класса, вы всегда можете вызвать метод следующим образом: Helper.ExecuteScalar(IDbCommandInstance, true); - person Rodrick Chapman; 12.07.2010

Это зависит от обстоятельств.
Можно написать реализацию IDbCommand, которая будет закрывать соединение.
Но, насколько я знаю, предоставленные реализации не закрывают соединение.

person Itay Karo    schedule 12.07.2010
comment
+1 за то, что ExecuteScalar — это метод интерфейса. - person Rodrick Chapman; 12.07.2010