2

这是我的代码:

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 未处理”。我不知道如何解决它。我需要检查“执行标量”命令中生成的值是否为空。请帮助我解决这个问题。

4

4 回答 4

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

于 2012-10-30T13:31:23.063 回答
1
cmd.ExecuteScalar()

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

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

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

于 2012-10-30T13:31:36.263 回答
0

.ToString() 和 Convert.ToString() 之间存在差异*

Convert.ToString() 处理空值,即如果您提供空输入,它将返回一个空字符串。

而您使用过的 .ToString() 会在传递空值时引发异常。

所以,你可以简单地选择改写你的代码,如下所示:

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

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

于 2012-10-30T13:35:13.473 回答
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 块来捕获异常,如果您想找出生成的值,则在代码中放置断点。

于 2012-10-30T13:40:09.710 回答