Правильный способ закрыть соединение с базой данных в случае исключения
Предоставляет ли следующий код открытию соединения, если есть исключение?
Я использую компактную версию Microsoft SQL.
try
{
SqlCeConnection conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
conn.Close();
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
Разумеется, лучшим способом было бы объявить объект соединения перед попыткой, установить соединение внутри блока try и закрыть его в блоке finally?
SqlCeConnection conn = null;
try
{
conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
}
catch (Exception ex)
{
ExceptionManager.HandleException(ex);
}
finally
{
if( conn != null ) conn.Close();
}
Ответы
Ответ 1
Как вы обрабатываете SqlCeCommand
в своем коде с помощью блока using
, вы можете сделать то же самое для SqlCeConnection
.
SqlCeConnection conn;
using (conn = new SqlCeConnection(ConnectionString))
{
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
}
Примечание. Вы можете использовать блок using
для классов, которые реализуют IDisposable
.
EDIT: Это то же самое, что и
try
{
conn = new SqlCeConnection(ConnectionString);
conn.Open();
SqlCeCommand cmd = conn.CreateCommand();
cmd.CommandText = "...";
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
ref: http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection%28VS.80%29.aspx
Ответ 2
Используйте Using
using(SqlConnection conn = new SqlConnection())
{
//put all your code here.
}
Ответ 3
try
catch
finally
- правильный способ справиться с этим, потому что соединение всегда должно быть закрыто в конце. но вы должны проверить не только conn != null
, но также и если conn
состояние не Closed
.
Ответ 4
Почему бы не использовать использование вокруг соединения, а также команду?
Ответ 5
Вы должны использовать оператор using
, который обрабатывает соединение, закрывающее без проблем
http://davidhayden.com/blog/dave/archive/2005/01/13/773.aspx
Ответ 6
Вам нужно попробовать следовать по пути.
Поскольку Connection Close In finally Block
try
{
SqlCeConnection conn = new SqlCeConnection(ConnectionString);
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
}
catch (Exception ex)
{
}
finally
{
\\close connection here
}