@Sushkov
">alert("yohoho")

Как правильно сделать запросы?

Использую localBD в проекте, использую в 1 раз и не особо еще разбираюсь в ней.
Я сделал функцию, которая возвращает полученные данные и чтобы работать с ними приходится не закрывать соединение.
SqlDataReader SqlQuery(string query)
        {
            SqlConnection sqlConnection = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\mail.mdf;Integrated Security=True");
            SqlCommand cmd = new SqlCommand();
            SqlDataReader reader;
            cmd.CommandText = query;
            cmd.CommandType = CommandType.Text;
            cmd.Connection = sqlConnection;
            try
            {
                sqlConnection.Open();
            }
            catch { }
            reader = cmd.ExecuteReader();
            return reader;
        }

Но иногда вылетает ошибка: 6a299644c5854b35981c3e8f165dcf7d.PNG Как сделать правильнее?
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 3
@dmitryKovalskiy
программист средней руки
Почитайте про управляемые и неуправляемые ресурсы. Если не умеете использовать сахар using и интерфейс IDisposable, то неплохо было бы помнить что соединение с базой нужно не только открывать, но и закрывать. В частности заменить
try
            {
                sqlConnection.Open();
            }
            catch { }

на
try
            {
                sqlConnection.Open();
                //Логика работы с данными.
            }
            catch { }
            finally{
            sqlConnection.Close();
            }
Ответ написан
petermzg
@petermzg
Самый лучший программист
Правильнее вынести из метода SqlConnection, и передовать его в метод в качестве параметра.

Это вообще жуть.
try
{
     sqlConnection.Open();
}
catch { }

Если у вас есть проблема с открытием соединения, то далее sqlConnection использовать смысла нет.
Выведите пользователю сообщение об проблемах с коннектом.

Общая логика приложения може быть такой.
- При запуске приложения открываете конекшен.
- Пользуетесь им пока приложение работает.
- Перед закрытием приложения, закрываете его.
Ответ написан
@VanKrock
using(SqlConnection sqlConnection = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\mail.mdf;Integrated Security=True"))
{
    using(SqlCommand cmd = new SqlCommand())
    {
    }
}


Никогда не используйте это
catch { }
Так вы помечаете код в блоке try, как бессмысленный и выполнится он или нет для вас не имеет значения

Если хотите передать исключение выше то пишите хотя бы
catch 
{
    throw;
}


когда будете работать c возвращаемым SqlDataReader его тоже надо будет освобождать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы