Свойство 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 шт):

Автор решения: aepot

Вам не нужен 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, материалов по нему можно найти очень много. Но внимательнее с ним, этот шаблон очень чуствителен к качеству реализации, и если быть неаккуратным, можно напрограммировать багов.

→ Ссылка