Я работаю со школьным проектом, где мы должны создать простую систему бронирования, которая использует базу данных SQL.Используемый язык - C # и среда Visual Studio Community 2017. Я пытаюсь создать функцию, в которой пользователь выбирает строку из dataGridView1 и нажимает кнопку «Добавить кнопку нового счета».Параметр booking_id извлекается из dataGridView1 и передается в форму Form2, где данные, связанные с бронированием, ищутся с помощью booking_id.Эти данные затем представляются в dataGridView2, в котором перечислены все услуги, включенные в одно указанное пользователем бронирование.
База данных содержит три соответствующие таблицы;Booking, Service и BoughServices.
Booking
содержит столбец booking_id
(INT) Services
содержит столбцы service_id
(INT), name
(VARCHAR)и price
(INT) BoughtServices
, содержит столбцы Booking.booking_id
(INT), Service.service_id
(INT) и amount
(INT)
Код включенФорма 1:
// Establish a class for data.
public static class DataToForm2
{
public static int booking_id;
}
// User clicks button 'Add new invoice'.
private void button_CreateInvoice_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
//Note: CurrentRow.Cells[0] contains booking_id.
DataToForm2.booking_id = Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value);
f2.Show();
}
Код формы 2:
private void Form2_Load(object sender, EventArgs e)
{
using(SqlConnection connection = new SqlConnection(connectionString))
{
// Set SQL query string.
string query = "SELECT Service.name, Services.price, BoughtServices.amount " +
"FROM Service " +
"INNER JOIN Service.service_id ON BoughtServices.service_id " +
"INNER JOIN Bookings ON Bookings.booking_id = BoughtServices.booking_id " +
"WHERE " +
"Booking.booking_id = @booking_id";
SqlCommand command = new SqlCommand(query, connection);
// Set query parameters.
command.Parameters.Add("@booking_id", SqlDbType.Int).Value = Form1.DataToForm2.booking_id;
// Run SQL query
var dataAdapter = new SqlDataAdapter(query, connection);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
dataGridView1.ReadOnly = true;
dataGridView2.DataSource = ds.Tables[0];
}
}
Однако этот подход не работает и выдает ошибку System.Data.SqlClient.SqlException: Must declare the scalar variable "@booking_id
.Я потратил все больше часов, чтобы понять это и найти решение из учебников, но пока что все они провалились.Интересно, что все работает очень хорошо, когда я добавляю booking_id непосредственно в оператор SQL.Другими словами, WHERE Booking.booking_id = 2
работает как талисман.
Может ли кто-нибудь мне помочь и предложить, как мне отформатировать код, чтобы я мог выполнять желаемые действия?Заранее спасибо!