我的代码出了什么问题?当我在sql server management studio和c#之间建立连接时,它给出了这个错误“ExecuteNonQuery:Connection属性尚未初始化”。
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString= "Database= hotel; server= Sherissa\SQLEXPRESS";
con.Open();
SqlCommand cmd = new SqlCommand("insert into CheckIn (@TransactionId,@GuestName,@RoomType,@RoomNo,@ReservationDate,@CheckInDate,@CheckOutDate,@NoOfDays,@NoOfAdults,@NoOfChildren)");
cmd.Parameters.AddWithValue("@TransactionId",textBox1.Text);
cmd.Parameters.AddWithValue("@GuestName", textBox2.Text);
cmd.Parameters.AddWithValue("@RoomType", textBox3.Text);
cmd.Parameters.AddWithValue("@RoomNo", textBox4.Text);
cmd.Parameters.AddWithValue("@ReservationDate", textBox5.Text);
cmd.Parameters.AddWithValue("@CheckInDate", textBox6.Text);
cmd.Parameters.AddWithValue("@CheckOutDate", textBox7.Text);
cmd.Parameters.AddWithValue("@NoOfDays", textBox8.Text);
cmd.Parameters.AddWithValue("@NoOfAdults", textBox9.Text);
cmd.Parameters.AddWithValue("@NoOfChildren", textBox10.Text);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("DATA ADDED SUCCESSFULLY!!");
}
答案 0 :(得分:3)
我在这里看到了几个错误。
第一个错误是您问题的实质内容。要解决该问题,您需要将命令与特定连接相关联。请记住,您可能同时连接到多个不同的数据库。命令需要知道要使用哪个连接。
下一个错误是您的Sql语法错误。您缺少必需的VALUES
关键字。
另一个问题是您没有正确关闭连接。如果抛出异常,代码将永远不会进入con.Close();
行。如果这种情况经常发生,您将自己锁定在数据库之外。
最后,一个挑剔。我不是.AddWithValue()方法的粉丝,因为它强制.Net尝试猜测你正在使用的sql数据类型。有时它会猜错,当它确实存在时,性能影响可能会很严重,因为它可能会破坏数据库上的索引使用。
以下是解决所有四个问题的代码:
private void button1_Click(object sender, EventArgs e)
{
using (var con = new SqlConnection("Database= hotel; server= roger\SQLEXPRESS"))
using (var cmd = new SqlCommand("insert into CheckIn VALUES (@TransactionId,@GuestName,@RoomType,@RoomNo,@ReservationDate,@CheckInDate,@CheckOutDate,@NoOfDays,@NoOfAdults,@NoOfChildren)", con))
{
cmd.Parameters.Add("@TransactionId", SqlDbType.Int).Value = int.Parse(textBox1.Text);
cmd.Parameters.Add("@GuestName", SqlDbType.NVarChar, 50).Value = textBox2.Text;
cmd.Parameters.Add("@RoomType", SqlDbType.NVarChar, 10).Value = textBox3.Text;
cmd.Parameters.Add("@RoomNo", SqlDbType.NChar, 4).Value = textBox4.Text;
cmd.Parameters.Add("@ReservationDate", SqlDbType.DateTime).Value = datetime.Parse(textBox5.Text);
cmd.Parameters.Add("@CheckInDate", SqlDbType.DateTime).Value = datetime.Parse(textBox6.Text);
cmd.Parameters.Add("@CheckOutDate", SqlDbType.DateTime).Value = datetime.Parse(textBox7.Text);
cmd.Parameters.Add("@NoOfDays", SqlDbType.Int).Value = int.Parse(textBox8.Text);
cmd.Parameters.Add("@NoOfAdults", SqlDbType.Int).Value = int.Parse(textBox9.Text);
cmd.Parameters.Add("@NoOfChildren", SqlDbType.Int).Value = int.Parse(textBox10.Text);
con.Open();
cmd.ExecuteNonQuery();
}
MessageBox.Show("DATA ADDED SUCCESSFULLY!!");
}
当然我不得不猜测要使用的数据类型,并且在我自己的代码中,我还会在尝试解析输入之前花费更多精力来验证输入。
答案 1 :(得分:1)
SqlCommand cmd = new SqlCommand("insert into CheckIn (@TransactionId, @GuestName, @RoomType, @RoomNo, @ReservationDate, @CheckInDate, @CheckOutDate, @NoOfDays, @NoOfAdults, @NoOfChildren)");`
此行应输入为
SqlCommand cmd = new SqlCommand("insert into CheckIn (@TransactionId, @GuestName, @RoomType, @RoomNo, @ReservationDate, @CheckInDate, @CheckOutDate, @NoOfDays, @NoOfAdults, @NoOfChildren)", con );
答案 2 :(得分:0)
您需要为您的命令分配连接:
SqlCommand cmd = new SqlCommand("insert into CheckIn (@TransactionId,@GuestName,@RoomType,@RoomNo,@ReservationDate,@CheckInDate,@CheckOutDate,@NoOfDays,@NoOfAdults,@NoOfChildren)", con);