Как зыкрыть соединение SQLite и вернуть значение?
Есть такой код метода:
public bool CheckInputedLogin(string login)
{
string query = "SELECT * FROM Accounts WHERE login = @login";
try
{
command = DataBase.GetConnection().CreateCommand();
command.CommandText = query;
command.Parameters.AddWithValue("@login", login);
DataBase.OpenConnection();
reader = command.ExecuteReader();
return reader.HasRows; // gets a value indicating whether the reader contains one or more lines
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка:\n\"{ex.Message}\"\n" +
$"Обратитесь к системному администратору для её устранения.",
"Ошибка работы с базой данных", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
DataBase.CloseConnection();
return false;
}
Соль в том, что закрытие соединения с БД идёт только перед возвращением false в конце. Как закрыть соединение из блока try? Перед return reader.HasRows
закрыть нельзя, метод будет работать неправильно. А после не имеет смысла.
Ответы (1 шт):
Автор решения: rotabor
→ Ссылка
public bool CheckInputedLogin(string login)
{
string query = "SELECT * FROM Accounts WHERE login = @login";
bool result = false;
try
{
command = DataBase.GetConnection().CreateCommand();
command.CommandText = query;
command.Parameters.AddWithValue("@login", login);
DataBase.OpenConnection();
reader = command.ExecuteReader();
result = reader.HasRows; // gets a value indicating whether the reader contains one or more lines
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка:\n\"{ex.Message}\"\n" +
$"Обратитесь к системному администратору для её устранения.",
"Ошибка работы с базой данных", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
try { DataBase.CloseConnection(); } catch { }
return result;
}
Ещё есть вариант
public bool CheckInputedLogin(string login)
{
string query = "SELECT * FROM Accounts WHERE login = @login";
try
{
command = DataBase.GetConnection().CreateCommand();
command.CommandText = query;
command.Parameters.AddWithValue("@login", login);
DataBase.OpenConnection();
reader = command.ExecuteReader();
return reader.HasRows; // gets a value indicating whether the reader contains one or more lines
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка:\n\"{ex.Message}\"\n" +
$"Обратитесь к системному администратору для её устранения.",
"Ошибка работы с базой данных", MessageBoxButtons.OK, MessageBoxIcon.Stop);
return false;
}
finally { DataBase.CloseConnection(); }
}
Здесь finally
выполняется всегда после завершения try
или catch
.