2012-10-30 35 views
2

这里是我的代码:的NullReferenceException是未处理 - 如何解决它

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

VS has'F9''F10'' F11' –

+2

当你编译**代码或者**运行代码时,你会得到一个错误吗?由于可能在您运行**代码时,请指出导致错误的代码行。你的堆栈跟踪,或你的调试器将帮助你。 –

+2

我怀疑你编译代码时会出错。我怀疑你运行代码时会出错。 –

回答

3

最有可能的异常发生在ToString

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

这当与ID没有患者在数据库中,因为那么ExecuteScalar返回空被发现发生。所以,你应该检查空:

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

注意:你不应该连接字符串建立你的SQL查询,但使用SqlParameters来避免SQL-Injection

1
cmd.ExecuteScalar() 

如果结果为空,则返回null。你应该如果是空

0

还有的ToString()和Convert.ToString(之间的差异*)

转换将其更改为

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

所以它更改为空字符串。 ToString()处理空值,即如果你给null输入,它会给你一个空字符串。

而.ToString()你用过的 - 当传递一个空值时抛出异常。

所以,你可以简单地选择另一种方式,像这样的代码:

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

**不是唯一的区别。在这里阅读更多:Difference between Convert.ToString() and .ToString()

+0

这是* a *之间的差异,但不是唯一的区别。 – Servy

+0

同意。我觉得在这个问题的范围内,这种差异很重要。感谢您提及,我会添加一个免责声明。 – tempidope

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块赶上你的例外,如果你想找出产生值然后把断点代码。

相关问题