我试图从.Net加载存储在SQL服务器上的一些图像数据但是在屏幕上显示错误时出现一条消息:无法将参数值从DataRowView转换为Int32 但我不知道问题出在哪里。
这部分代码:
try
{
conn.Open();
strSQL = "SELECT * FROM Pictures WHERE ID = @ID";
da = new SqlDataAdapter(strSQL, conn);
da.SelectCommand.Parameters.Add("@ID" ,SqlDbType.Int).Value = listBox1.SelectedValue;
ds = new DataSet();
da.Fill(ds, "Pictures");
byte[] arrPic = (byte[])(ds.Tables["Pictures"].Rows[0]["Pic"]);
MemoryStream ms = new MemoryStream(arrPic);
pictureBox1.Image = Image.FromStream(ms);
conn.Close();
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message);
}
错误已打开" da.Fill(ds,"图片");"
答案 0 :(得分:2)
listBox1.SelectedValue
返回一个对象,而不是整数。尝试将其转换为
da.SelectCommand.Parameters.Add("@ID" ,SqlDbType.Int).Value = Convert.ToInt32(listBox1.SelectedValue);
@Kevin在他的评论中指出,如果listBox
实际上返回整个DataRowView
,则可能必须使用不同的方法。像这样的东西
DataRowView drv = (DataRowView)listBox1.SelectedItem;
String valueOfItem = drv["TheColumnYouActuallyWant"].ToString();
da.SelectCommand.Parameters.Add("@ID" ,SqlDbType.Int).Value = Convert.ToInt32(valueOfItem);
如this问题所示。