2010-07-12 2 views

ответ

6

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

3

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

+1

+1 для обозначения того, что ExecuteScalar - это метод на интерфейсе. –

5

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

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; 
} 
+0

это выглядит красиво, но я могу только развиваться против .NET 2.0 =) – Rookian

+1

@Rookian. Поскольку методы расширения - это просто методы в статическом классе, вы всегда можете вызвать метод следующим образом: Helper.ExecuteScalar (IDbCommandInstance, true); –