2012-02-28 6 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で、にstringを渡しているようです。

データベース内の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で解析し、それを実行して何が起こるかを見て、それに応じて文字列を調整してください。このようにして今からあなたはなぜ失敗しているのか、何かが失敗したときにあなたのプログラムに応じてハンドヘルのエラーを見ることができます。

関連する問題