2012-10-30 2 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이 처리되지 않은했다"는. 나는 그것을 해결하는 방법을 모른다. "스칼라 실행"명령에서 생성 된 값이 null인지 아닌지 확인해야합니다. 이 문제를 해결할 때 도와주십시오.

+4

VS에'F9'' F10''F11' –

+2

** 코드를 ** 컴파일 할 때 또는 ** ** 코드를 실행할 때 오류가 발생합니까? 아마도 ** 코드를 실행하면 오류의 원인이되는 코드 줄을 표시하십시오. 스택 트레이스 나 디버거가 도움이 될 것입니다. –

+2

코드를 컴파일 할 때 오류가 발생하는 것 같지 않습니다. 코드를 실행할 때 오류가 발생한다고 생각합니다. –

답변

3

은 대부분의 경우를 제외하고는 ToString에 제기되었다

해당 ID와 어떤 환자가 데이터베이스 때문에 다음 ExecuteScalar 반환 null을 발견 할 때 발생
textBox2.Text = cmd.ExecuteScalar().ToString(); 

. 그래서 당신은 널 (null)를 확인해야합니다

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

을 : 당신은 당신의 SQL 쿼리를 구축하지만, SQL-Injection을 피하기 위해 대신 SqlParameters를 사용하는 문자열을 연결해서는 안된다.

1
cmd.ExecuteScalar() 

결과가 비어 있으면 null을 반환 할 수 있습니다. 로 .toString()와 Convert.ToString (차이 *)

변환이 있습니다

0

null의 경우, 당신은 그래서 빈 문자열로 변경

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

로 변경해야합니다. ToString()은 null 값을 처리합니다. 즉, null 입력을 제공하면 빈 문자열이 반환됩니다.

반면, 사용 된 .ToString()은 null 값이 전달 될 때 예외를 throw합니다.

그래서, 당신은 단순히과 같이 코드를 바꿔하도록 선택할 수 있습니다 :

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

**하지 유일한 차이점입니다. 자세한 내용은 여기 읽기 : Difference between Convert.ToString() and .ToString()

+0

그건 두 차이가 있지만 유일한 차이는 아닙니다. – 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); 
    }  
} 

당신은 시도의 catch 블록을 넣어 당신의 예외를 캐치하고 생성 된 값을 찾으려면 다음 코드에 중단 점을 넣을 수 있습니다.

관련 문제