Является ли хорошей практикой закрывать соединение SQL после обнаружения исключения? - PullRequest
1 голос
/ 06 августа 2020

Не знаете, следует ли мне явно закрыть свое SQL соединение после возникновения ошибки или это будет сделано автоматически?

Предположим, у меня есть какое-то событие щелчка

string conString = "something";
string query = "someQuery";
SqlConnection con = new SqlConnection(conString);
SqlCommand = new SqlCommand(query, con);
try {
   con.Open()
   //Something that will cause an error
} catch (Exception ex) 
{ 
   MessageBox.Show("Error Occurred")
   con.Close()
}

это лучшая практика или это будет бесполезно? Идея состоит в том, чтобы повторить операцию после закрытия окна сообщения.

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Вы должны очистить соединение, когда вы закончите, независимо от исключения или успеха, но это не обязательно означает вызов Close. Чаще всего вы просто используете оператор using, который вызывает API очистки (Dispose()) при выходе из области видимости. Это очень просто:

using (SqlConnection con = new SqlConnection(conString))
using (SqlCommand cmd = new SqlCommand(query, con))
{
    con.Open();
    //Something
}

Или в более поздних версиях C#, если using будет заканчиваться в конце родительской области:

using var con = new SqlConnection(conString);
using var cmd = new SqlCommand(query, con);
con.Open();
//Something
0 голосов
/ 06 августа 2020

Вы можете использовать Наконец https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/try-catch-finally

  try
    {
        //exec
    }
    catch (Exception err)
    {
       // call error ;
    }
    finally
    {
        // close conn            
    }


 
...