这是我的代码:
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。请帮助我解决这个问题。
答案 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块来捕获你的异常,如果你想找出生成的值,那么在代码中放置断点。