Свойство ConnectionString не инициализировано
решил подключаться к бд через класс и как обычно новые ошибки System.InvalidOperationException: "Для ExecuteScalar нужно открытое и доступное подключение Connection. Подключение закрыто."
using (Connction.sqlConnection)
{
SqlCommand sqlCommand = new SqlCommand("SELECT Key_num FROM Users WHERE Phone = @Phone", Connction.sqlConnection);
sqlCommand.Parameters.AddWithValue("@Phone", phone);
return (int?)sqlCommand.ExecuteScalar();
}
я добавил Connction.sqlConnection.Open(); и выдало другую ошибку : System.InvalidOperationException: "Свойство ConnectionString не инициализировано."
помогите решить)
вот класс подключения к бд
public static class Connction
{
public static SqlConnection sqlConnection = new SqlConnection(@"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename=D:\MDK\MDK\MDK\DB.mdf;Integrated Security = True");
}
Ответы (1 шт):
Вам не нужен using здесь, даже возможно он все и портит, так как при повторном вызове этого метода SqlCommand уже будет очищена. И засовывать в статичные поля IDisposable объекты - плохая идея, потому что в этом случае для них надо вызывать Dispose() при завершении работы программы вручную.
Просто, без using
SqlCommand sqlCommand = new SqlCommand("SELECT Key_num FROM Users WHERE Phone = @Phone", Connction.sqlConnection);
sqlCommand.Parameters.AddWithValue("@Phone", phone);
return (int?)sqlCommand.ExecuteScalar();
А при завершении работы программы вызовите вручную Connction.sqlConnection.Dispose().
Если же вам хочется сделать все правильно с одиночным объектом вашего класса на все время работы программы, то вместо static используйте шаблон программирования Singleton, материалов по нему можно найти очень много. Но внимательнее с ним, этот шаблон очень чуствителен к качеству реализации, и если быть неаккуратным, можно напрограммировать багов.