2012-02-28 1 views
1

나는이 코드를 가졌다.처리되지 않은 SQLException은 어디서 비롯된 것입니까?

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     SqlConnection cnn; 
     string connectionString; 
     connectionString = "server=.\\sqlexpress;database=Blue;trusted_connection=true"; 
     cnn = new SqlConnection(connectionString); 

     MemoryStream stream = new MemoryStream(); 
     cnn.Open(); 
     SqlCommand command = new SqlCommand("select Image from ImageParts where ImageName=" + listBox1.SelectedIndex, cnn); 
     byte[] image = (byte[])command.ExecuteScalar(); 
     stream.Write(image, 0, image.Length); 
     cnn.Close(); 
     Bitmap bitmap = new Bitmap(stream); 
     pictureBox1.Image = bitmap; 
    } 

내가 그런 다음 listBox1.Items

에서 ImageName을 저장 한 오류가 온다.

varchar 값 'c1.jpg'을 데이터 유형 int로 변환 할 때 변환하지 못했습니다.

무엇이 문제 일 수 있습니까? C#을 처음 접했을 때 이러한 오류에 익숙하지 않았습니다.

답변

1

데이터베이스에있는 ImageName 필드의 데이터 유형이 int이고, (varchar)을 전달하는 것 같습니다.

데이터베이스에서 ImageName의 데이터 유형을 확인하고 수정하십시오.

+0

나는 Shark에 동의한다. 여기서 문제는 데이터 유형 불일치이다. –

1

데이터베이스의 ImageName 열이 int 유형이 아닌 문자열 유형이라고 가정합니다. SqlCommand에 이미지의 이름이 아닌 인덱스를 전달하고 있습니다. 이 경우에는 문자열 주위에 작은 따옴표를 사용하는 것을 잊지 마십시오. 여기

string nameImg = listBox1.SelectedItem.ToString(); 
SqlCommand command = new SqlCommand("select Image from ImageParts where ImageName = '" + nameImg + "'"); 

나는 당신의 목록 상자가 이미지 스티브 당신은 또한 SQL 명령에 대한 시도의 catch 블록 휴식에 코드를 감싸고 볼 수 말과 함께

0

의 문자열 이름으로 가득 있다고 가정 무엇 값이 서버로 전송됩니다. 즉각적인 창이나 시계를 통해 command.CommandText.ToString()을 가져 와서 그 값을 복사 한 다음 SSMS에서 구문 분석을 실행하고 결과를보고 그에 따라 문자열을 조정하십시오. 이제부터는 오류가 발생한 이유와 오류가 발생할 때 프로그램에서 헨들 오류를 볼 수 있습니다.

관련 문제