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