2012-02-28 58 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传递给它(varchar)。

验证并更正数据库中的数据类型ImageName

+0

我同意鲨鱼,这里的问题是数据类型不匹配 – 2012-02-28 20:07:21

1

我想你的数据库中的ImageName列是一个字符串类型,而不是一个int类型。您将索引而不是图像的名称传递给您的SqlCommand。如果是这种情况,请不要忘记在字符串周围使用单引号。

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

在这里,我想你的列表框填充您的图像

0

随着什么史蒂夫说你也应该换你的代码中的SQL命令try catch块休息,看到的字符串名称是什么值是正在发送到服务器。在你的立即窗口或手表中获取command.CommandText.ToString(),复制该值,然后尝试在SSMS中解析它并查看会发生什么并相应地调整字符串。从现在开始,你可以看到它失败的原因,并在事情失败时在程序中相应地处理错误。