我得到的未处理的SQLException来自哪里?

时间:2012-02-28 19:54:55

标签: c# image exception sql-server-express

我有这个代码;

    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;
    }

我已将ImageName存储在listBox1.Items

然后,错误来了。

  

将varchar值'c1.jpg'转换为数据时转换失败   输入int。

可能是什么问题?由于我是C#的新手,我不熟悉这些错误。

3 个答案:

答案 0 :(得分:1)

您的数据库中ImageName字段的数据类型为int,而您正在向其string传递varchar

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

答案 1 :(得分:1)

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

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

这里我假设您的列表框中填充了图像的字符串名称

答案 2 :(得分:0)

除了Steve所说的,你还应该将代码包装在SQL命令的try catch块中,并查看发送到服务器的值是什么。在你的即时窗口或通过监视器获取command.CommandText.ToString(),复制该值并尝试在SSMS中运行它并解析它会发生什么并相应地调整你的字符串。从现在开始,你可以看到它失败的原因,以及当程序失败时程序中的错误。