我正在与一个学校项目合作,我们应该 Build 一个利用SQL数据库的简单预订系统 . 使用的语言是C#和环境Visual Studio Community 2017.我正在尝试构建一个函数,用户从dataGridView1中选择一行并单击“添加新发票按钮” . booking_id从dataGridView1中提取并传递到Form2,其中使用booking_id搜索与预订相关的数据 . 然后,此数据将显示在dataGridView2中,该列表列出了用户指定的一个预订中包含的所有服务 .
数据库包含三个相关表;预订,服务和BoughServices .
Booking 包含 booking_id (INT)列
Services 包含 service_id (INT), name (VARCHAR)和 price (INT)列
BoughtServices ,包含 Booking.booking_id (INT), Service.service_id (INT)和 amount (INT)列
Form1上的代码:
// 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();
}
Form2上的代码:
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 就像一个魅力 .
有人可以帮助我,并建议我应该如何格式化我的代码,以便我能够执行所需的操作?先感谢您!