Подключите dataGridView к запросу SQL - PullRequest
0 голосов
/ 05 мая 2018

Я создаю простую систему бронирования с C # Windows Forms и базой данных SQL. Как часть программы, пользователь может добавить текст в текстовые поля и нажать кнопку «Поиск», чтобы найти заказы, которые соответствуют критерию поиска. Когда пользователь нажимает кнопку, SQL-запрос выполняется и результаты запроса обновляются в dataGridView.

Пример ниже - простой пример из моего кода. Формат для booking_id - это int, а строка для firstname. Программа продолжает выдавать System.InvalidCastException, и ошибка как-то связана со строкой, которая пытается вставить booking_id в строку SQL. Я искал информацию об этой ошибке, но все еще не могу ее исправить. Это должно быть что-то очень простое, я здесь скучаю - кто-то может помочь? Заранее спасибо!

// User clicks 'Search' butto.
private void button_Search1_Click(object sender, EventArgs e)
{
    string commandText = "SELECT * FROM Booking " +
        "INNER JOIN Customer ON Booking.customer_id = Customer.customer_id" +
        "WHERE Booking.booking_date IS NOT NULL AND " +
        "Booking.booking_id_id LIKE '%' + @booking_id + '%' " +
        "Customer.customer.firstname LIKE '%' + @firstname + '%'";

    using (SqlConnection connection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;" + @"AttachDbFilename=|DataDirectory|\Booking.mdf; Integrated Security=True"))
    {
        //Create a SqlCommand instance
        SqlCommand command = new SqlCommand(commandText, connection);

        //Add the parameter
        //THESE LINES CAUSE PROBLEM!?
        command.Parameters.Add("@booking_id", SqlDbType.Int).Value = Convert.ToInt32(textBox_BookindId);
        command.Parameters.Add("@firstname", SqlDbType.VarChar, 20).Value = textBox_Firstname;

        // Open SQL connection and execute query.
        connection.Open();
        command.ExecuteNonQuery();

        SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
        DataTable dt = new DataTable();
        dataAdapter.Fill(dt);
        dataGridView1.DataSource = dt;

1 Ответ

0 голосов
/ 06 мая 2018

Если цель состоит в том, чтобы заставить столбец booking_id_id в Datatable dt быть строкой, чтобы он правильно помещался в текстовое поле, тогда CAST идентификатор бронирования будет строкой при его выборе. Обратите внимание, что я назвал столбец Booking ID, используя 'как'

string commandText = "SELECT Customer.customer_id, Booking.booking_date, CAST(Booking.booking_id_id) as NVARCHAR(10)) as 'Booking ID', Customer.customer.firstname FROM Booking " + "INNER JOIN Customer ON Booking.customer_id = Customer.customer_id" + "WHERE Booking.booking_date IS NOT NULL AND " + "Booking.booking_id_id LIKE '%' + @booking_id + '%' " + "Customer.customer.firstname LIKE '%' + @firstname + '%'";

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