我有这个代码;
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#的新手,我不熟悉这些错误。
答案 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中运行它并解析它会发生什么并相应地调整你的字符串。从现在开始,你可以看到它失败的原因,以及当程序失败时程序中的错误。