Корректный способ закрыть соединение с базой данных в событии исключения

Следующее кодирует, оставляют соединение открытым, если существует исключение?

Я использую 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();
}
15
задан Jon Seigel 16 May 2010 в 01:03
поделиться

5 ответов

То, как вы обрабатываете 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

29
ответ дан 1 December 2019 в 00:54
поделиться

Использовать Использование

using(SqlConnection conn = new SqlConnection())
{
//put all your code here.
}
8
ответ дан 1 December 2019 в 00:54
поделиться
try
catch
finally

- правильный способ справиться с этим, потому что соединение всегда должно быть закрыто в конце. но вы должны проверить не только то, что conn! = null , но и то, что состояние conn не является Closed .

4
ответ дан 1 December 2019 в 00:54
поделиться

Почему бы не использовать использование для соединения, а также команду?

0
ответ дан 1 December 2019 в 00:54
поделиться

Вы должны использовать using оператор , который без проблем обрабатывает закрытие соединения http://davidhayden.com/blog/dave/archive/2005/01/13/ 773.aspx

0
ответ дан 1 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: