Как установить состояние флажка на WinForm в Visual Studio C # на основе значений базы данных SQL? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь установить флажки на форме Windows C # в VS2017 либо в состояние «отмечено», либо «нет», основываясь на значениях, извлеченных из соответствующей базы данных SQL Server.Мне не удалось установить свойство флажки, отмеченные на Winform в VS2017 с соответствующими значениями из таблицы SQL Server.

У меня есть форма C # Windows в Visual Studio, которая связана с базой данных SQL в SQL Server.В этой форме есть несколько флажков, которые соответствуют именам столбцов в базе данных SQL.Столбцы имеют тип данных "бит" в SQL Server.Флажки Winform - это автономные флажки, отображаемые на форме.Я пробовал несколько подходов к тому, что кажется простой задачей, но до сих пор не удалось загрузить состояния флажков.

* Информация о SQL Server * Имя базы данных SQL SERVER«Компании», имя таблицы данных - «Клиенты», а конкретный интересующий столбец называется «custNeed», который имеет «битовый» тип данных.

Companies.dbo.Customers.custNeed

VS2017 C # Info

Ниже приведена моя текущая попытка кода C # для этого метода.Этот код только для одного конкретного флажка.Эта конкретная запись имеет значение 1, а состояние проверки по умолчанию - false в VS2017.

private void loadCheckMarks()
{
    //connect to SQL DB, then build adapter to fill datatable
    string query = "SELECT custNeed FROM Companies.dbo.Customers;";
    SqlDataAdapter da = new SqlDataAdapter(query, connection);
    connection.ConnectionString = connStr;
    connection.Open();
    DataTable dt = new DataTable();
    da.Fill(dt);

    //establish reader
    SqlDataReader reader;
    cmd.CommandText = "Select custNeed FROM Customers WHERE ID = 1000001;";
    reader = cmd.ExecuteReader();

    //set Checked status of Checkbox
    checkBox1.Checked = (bool)reader["custNeed"];
}

Я вызвал метод при нажатии кнопки и ожидал, что флажок изменится с непроверенного на проверку, но ничего не произошло.

1 Ответ

1 голос
/ 22 мая 2019

Я не уверен, где вы определяете cmd, но здесь происходит много всего, что не имеет ничего общего с чтением этого запроса и установкой флажка.Вот простой код, который использует метод ExecuteScalar, поскольку вы запрашиваете только одну строку и столбец.Нет обработки ошибок, поскольку код просто показывает вам метод для выполнения того, что вы просите.Это не удастся, если вы не найдете запись на основе своего идентификатора и должны быть обработаны.

using (SqlConnection con = new SqlConnection("YOUR CONNECTION STRING"))
{
    string query = "SELECT custNeed FROM Customers WHERE ID = 1000001;";
    using (SqlCommand cmd = new SqlCommand(query, con))
    {
        con.Open();
        //since you're only returning a single column you can forego the reader 
        //and just use ExecuteScalar
        checkBox1.Checked = (bool)cmd.ExecuteScalar();
    }
}

Кроме того, поскольку вы установили несколько флажков, я добавлю метод, который использует читатель для чтениячерез возвращенный ряд.Опять же, нет обработки ошибок и использования reader.Read ();читать одну строку вместо циклического чтения.

Хотя я не полностью знаю схему вашей таблицы Customers, я просто буду использовать пару имен столбцов в качестве примеров

using (SqlConnection con = new SqlConnection("YOUR CONNECTION STRING"))
{
    string query = "SELECT custNeed, isActive FROM Customers WHERE ID = 1000001;";
    using (SqlCommand cmd = new SqlCommand(query, con))
    {
        con.Open();
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            reader.Read(); //reads the first single returned row. 
            checkBox1.Checked = (bool)reader["custNeed"];
            checkBox2.Checked = (bool)reader["isActive"];
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...