NullReferenceException未处理 - 如何解决它

时间:2012-10-30 13:27:23

标签: c#

这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=MANINOTEBOOK\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=Casesheet");
    con.Open();
    SqlCommand cmd = new SqlCommand("select PatientID from FTR where PatientID='" + textBox1.Text + "'", con);
    textBox2.Text = cmd.ExecuteScalar().ToString();
    if (textBox2.Text == textBox1.Text)
    {
        Consultation cs = new Consultation(textBox1.Text);
        cs.Show();
    }
    else
    {
        MessageBox.Show("Data not found");
    }            
}

当我编译此代码时,我收到错误“NullReferenceException未处理”。我不知道如何解决它。我需要检查“execute scalar”命令中生成的值是否为null。请帮助我解决这个问题。

4 个答案:

答案 0 :(得分:3)

最有可能的异常是ToString

textBox2.Text = cmd.ExecuteScalar().ToString();

当在数据库中找不到具有该ID的患者时会发生这种情况,因为ExecuteScalar返回null。所以你应该检查null:

Object patID = cmd.ExecuteScalar();
if(patID != null)
{
    String patientID = patID.ToString();
    // ...
}

注意:您不应该连接字符串来构建您的SQL查询,而是使用SqlParameters来避免SQL-Injection

答案 1 :(得分:1)

cmd.ExecuteScalar()

如果结果为空,则返回null。你应该把它改成

 (cmd.ExecuteScalar() ?? "").ToString()

如果为空,则将其更改为空字符串

答案 2 :(得分:0)

.ToString()和Convert.ToString()

之间存在差异*

Convert.ToString()处理空值,即如果你给出空输入,它会给你一个空字符串。

然而,你使用的.ToString() - 在传递空值时抛出异常。

所以,您可以选择重新编写代码,如下所示:

textBox2.Text = cmd.ExecuteScalar().ToString();

**不是唯一的区别。在此处阅读更多内容:Difference between Convert.ToString() and .ToString()

答案 3 :(得分:0)

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=MANINOTEBOOK\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=Casesheet");
  try
  {
    con.Open();
    SqlCommand cmd = new SqlCommand("select PatientID from FTR where PatientID='" + textBox1.Text + "'", con);
    textBox2.Text = cmd.ExecuteScalar().ToString();
    if (textBox2.Text == textBox1.Text)
    {
        Consultation cs = new Consultation(textBox1.Text);
        cs.Show();
    }
    else
    {
        MessageBox.Show("Data not found");
    }    
  } 
   catch(NullReferenceException ex)
   {
   Console.Write(ex.message);
   }     
}

你可以通过放置try catch块来捕获你的异常,如果你想找出生成的值,那么在代码中放置断点。