2012-10-30 37 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塊趕上你的例外,如果你想找出產生值然後把斷點代碼。

相關問題