Выполняет ли ExecuteScalar автоматическое соединение?ADO.NET: ExecuteScalar автоматически закрывает соединение?
ответ
Нет, вам нужно явно открыть и закрыть соединение при использовании ExecuteScalar().
Это зависит.
Можно написать реализацию IDbCommand
, которая закроет соединение.
Но насколько я знаю, предоставленные реализации не закрывают соединение.
Вы можете создать перегруз с использованием метода расширения, хотя я не уверен, что это хорошая идея.
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;
}
это выглядит красиво, но я могу только развиваться против .NET 2.0 =) – Rookian
@Rookian. Поскольку методы расширения - это просто методы в статическом классе, вы всегда можете вызвать метод следующим образом: Helper.ExecuteScalar (IDbCommandInstance, true); –
+1 для обозначения того, что ExecuteScalar - это метод на интерфейсе. –