你调用的对象是空的。需要帮助

时间:2019-05-07 04:03:32

标签: c# sql-server winforms

尝试使用这些代码将数据添加到我的数据库中,但始终出现错误,是否有解决此问题的建议?对象引用未设置为对象的实例。

private void button1_Click(object sender, EventArgs e)
        {
            con = new SqlConnection("Data Source=GREGJAMES\\SQLEXPRESS;Initial Catalog=Hotel;Integrated Security=True");
            con.Open();
            cmd = new SqlCommand("INSERT INTO [Guest Info] (Guest, Phone, TypeOfRoom, CheckIn, CheckOut, NumberOfAdults, NumberOfChildren) VALUES (@Guest, @Phone, @TypeOfRoom, @CheckIn, @CheckOut, @NumberOfAdults, @NumberOfChildren)", con);
            cmd.Parameters.Add("@Guest", textBox1.Text);
            cmd.Parameters.Add("@Phone", textBox1.Text);
            cmd.Parameters.Add("@TypeOfRoom", comboBox1.SelectedItem.ToString());
            cmd.Parameters.Add("@CheckIn", dateTimePicker1.Value.ToString());
            cmd.Parameters.Add("@CheckOut", dateTimePicker2.Value.ToString());
            cmd.Parameters.Add("@NumberOfAdults", comboBox2.SelectedItem.ToString());
            cmd.Parameters.Add("@NumberOfChildren", comboBox3.SelectedItem.ToString());
            cmd.ExecuteNonQuery();

            {
                MessageBox.Show("Reserved!");
            }
                this.Close();

1 个答案:

答案 0 :(得分:0)

con或cmd变量都为null,因为无法建立连接(这些行):

 con = new SqlConnection("Data Source=GREGJAMES\\SQLEXPRESS;Initial 
     Catalog=Hotel;Integrated Security=True");
 cmd = new SqlCommand("INSERT INTO [Guest Info] (Guest, Phone, TypeOfRoom, CheckIn, CheckOut, NumberOfAdults, NumberOfChildren) VALUES (@Guest, @Phone, @TypeOfRoom, @CheckIn, @CheckOut, @NumberOfAdults, @NumberOfChildren)", con);

检查您的数据库是否打开,如果在构造函数中键入这些字符串时出错,如果您看到异常详细信息,则可以看到引发异常的行,您将知道这是con还是cmd问题。 / p>

当您尝试调用空对象的方法时,会出现此异常。

编辑:我看到您说此行引发了错误:

cmd.Parameters.Add("@TypeOfRoom", comboBox1.SelectedItem.ToString());

这意味着comboBox提供了异常,这可能是因为您在单击按钮时未选择任何项目,因为未选择任何内容,因此对.ToString()的调用将引发null异常。像这样用try catch包围该部分:

try
{
    cmd.Parameters.Add("@TypeOfRoom", comboBox1.SelectedItem.ToString());
}catch(Exception e)
{
    //This code will be executed when the exception is thrown (when you 
    //haven't selected an item, so the selected item is null)
}

如果选择一个项目并单击按钮,但它仍然崩溃,则comboBox为null,您必须修复代码以确保其不为null。