未能将参数值从DataRowView转换为int32;关于运行代码的消息

本文关键字:于运行 运行 消息 代码 int32 参数 转换 DataRowView | 更新日期: 2023-09-27 18:07:16

我试图从。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"上出现错误。填充(ds,"图片");"

未能将参数值从DataRowView转换为int32;关于运行代码的消息

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