Следующее кодирует, оставляют соединение открытым, если существует исключение?
Я использую 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);
}
Конечно, лучший путь состоял бы в том, чтобы объявить объект соединения перед попыткой, установить соединение в блоке попытки и окружить его наконец блок?
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();
}
То, как вы обрабатываете SqlCeCommand
в своем коде с помощью блока с использованием
, вы можете сделать то же самое для SqlCeConnection
.
SqlCeConnection conn;
using (conn = new SqlCeConnection(ConnectionString))
{
conn.Open();
using (SqlCeCommand cmd =
new SqlCeCommand("SELECT stuff FROM SomeTable", conn))
{
// do some stuff
}
}
Примечание. Вы можете использовать блок с использованием
для классов, реализующих IDisposable
.
РЕДАКТИРОВАТЬ: аналогично
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
Использовать Использование
using(SqlConnection conn = new SqlConnection())
{
//put all your code here.
}
try
catch
finally
- правильный способ справиться с этим, потому что соединение всегда должно быть закрыто в конце. но вы должны проверить не только то, что conn! = null
, но и то, что состояние conn
не является Closed
.
Почему бы не использовать использование для соединения, а также команду?
Вы должны использовать using оператор
, который без проблем обрабатывает закрытие соединения
http://davidhayden.com/blog/dave/archive/2005/01/13/ 773.aspx