Выражение не булева типа, указанное в контексте, где ожидается условие, рядом с ';' - PullRequest
0 голосов
/ 01 марта 2020

Код:

private void btnEnter_Click(object sender, EventArgs e)
    {
        if (comboUserType.SelectedItem == "Student")
        {
            OpenCon();
            dgvReturnBook.DataSource = SqlAdapter("SELECT * FROM IssueBooks WHERE('"+txtUSN.Text+"');");
            con.Close();
        }
    }

Я хочу заполнить свой datagrid, но появляется следующая ошибка.

An expression of non-boolean type specified in a context where a condition is expected, near ';'.

dgvReturnBook.DataSource = SqlAdapter("SELECT * FROM IssueBooks WHERE('"+txtUSN.Text+"');");

Я не понимаю ошибка.

Я пытался Параметры:

private void btnEnter_Click(object sender, EventArgs e)
    {
        if (comboUserType.SelectedItem == "Student")
        {
            OpenCon();
            dgvReturnBook.DataSource = SqlAdapter("SELECT * FROM IssueBooks WHERE USN=@usn");
            Parameters("@usn", txtUSN.Text);
            ENQ();
            con.Close();
        }
    }

Но появляется другая ошибка:

must declare the scalar variable "@usn"

Пожалуйста, помогите

1 Ответ

0 голосов
/ 01 марта 2020

Первый приведенный вами пример даже синтаксически некорректен SQL, а также второй пример. Они не могут работать.

Третий фрагмент содержит правильный SQL, но он неполон.

Что-то вроде этого должно работать ( У меня нет проверено это ), при условии, что у вас уже установлено соединение con:

private void btnEnter_Click(object sender, EventArgs e) {
    using (SqlCommand cmd = new SqlCommand("SELECT * FROM IssueBooks WHERE USN=@usn", con)) {
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.Add("@usn", SqlDbType.VarChar).Value = txtUSN.Text;
        using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
        {
            using (DataTable dt = new DataTable())
            {
                sda.Fill(dt);
                dgvReturnBook.DataSource = dt;
            }
        }
    }
}

Существуют различные способы сделать это, например, вы можете просто использовать SqlCommand и выполнить его, чтобы заполнить datatable, который служит источником данных для datagridview. SqlDataAdapter даже не нужно.

...