大家好;
能请教个问题吗?如上图数据库的image字段如下面的代码读取时会提示参数无效,请教下要怎么解决呢?感谢。
补充报错部分:
private void button5_Click(object sender, EventArgs e)
{
SqlConnection mycon2 = new SqlConnection(constr2);
mycon2.Open();
string sqlstr = "select picture from pic";//
SqlCommand cmd = new SqlCommand(sqlstr, mycon2);
SqlDataAdapter sda = new SqlDataAdapter(sqlstr, mycon2);
SqlDataReader rd = cmd.ExecuteReader();
rd.Read();
byte[] array = new byte[0];
array = (byte[])rd["picture"];
MemoryStream ms = new MemoryStream();
Bitmap image = new Bitmap(ms);
pictureBox1.Image = Image.FromStream(ms);
mycon2.Close();
}
该回答引用ChatGPT
根据代码,可以看出在执行 MemoryStream ms = new MemoryStream(); 语句时,内存流中并没有包含图像二进制数据,所以当执行 pictureBox1.Image = Image.FromStream(ms); 时会出现参数无效的错误。
需要在读取二进制数据后,将数据写入内存流中,然后再将内存流的位置设置为开始位置,再进行图像的加载,可以参考以下代码:
private void button5_Click(object sender, EventArgs e)
{
SqlConnection mycon2 = new SqlConnection(constr2);
mycon2.Open();
string sqlstr = "select picture from pic";//
SqlCommand cmd = new SqlCommand(sqlstr, mycon2);
SqlDataReader rd = cmd.ExecuteReader();
rd.Read();
byte[] array = new byte[0];
array = (byte[])rd["picture"];
MemoryStream ms = new MemoryStream(array);
ms.Seek(0, SeekOrigin.Begin);
pictureBox1.Image = Image.FromStream(ms);
mycon2.Close();
}
在读取二进制数据后,将二进制数据写入 MemoryStream 对象 ms 中,并将 ms 的位置设为 0,然后才进行图像的加载。
具体是哪一行代码在报错呢你发出来看看,或者你点报错的那行代码的源码进去看看是不是字段格式不匹配的问题。
byte[] array = new byte[0];
array = (byte[])rd["picture"];
MemoryStream ms = new MemoryStream();
Bitmap image = new Bitmap(ms);
上面是你的代码,你将图片信息存储到缓存array中,但是你没有将缓存的信息写到ms流中,所以在新建BitMap时,参数ms中没有图片信息,所以提示参数无效。MemoryStream ms = new MemoryStream(array);这样新建流就可以了。
亲测有效!代码如下:
```c#
private void button1_Click(object sender, EventArgs e)
{
FileStream f = new FileStream("E:\\1.jpg", FileMode.Open);
byte[] array = new byte[f.Length];
f.Read(array, 0, (int)f.Length);
MemoryStream ms = new MemoryStream(array);
Bitmap image = new Bitmap(ms);
pictureBox1.Image = Image.FromStream(ms);
}
```