C#+SQL 图片的存取 stream异常

my_lover1314 2011-03-16 12:31:33
存:

Model userAdd = new Model();
Stream ms = openFileDialog1.OpenFile();
byte[] picbyte = new byte[ms.Length];
//ms.Position = 0;
ms.Read(picbyte, 0, Convert.ToInt32(ms.Length));
userAdd.Photo = picbyte;
ms.Close();
SQLOperateClass.Insert(userAdd);


取:

Model model = SQLOperateClass.SelectByID(k);
MemoryStream ms = new MemoryStream(model.Photo);
// int time = ms.ReadTimeout;
// ms.Position = 0;
this.pictureBox1.Image = Image.FromStream(ms);
ms.Close();



this.pictureBox1.Image = Image.FromStream(ms);在这里提示参数无效的错误。仔细看了看,说memorystream 的readTimeout 和writeTimeout 抛出了异常。。


怎么处理??
...全文
134 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
my_lover1314 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rekym 的回复:]
MemoryStream MS = new MemoryStream(data);
Bitmap image = new System.Drawing.Bitmap(MS);
this.picIndiPhoto.Image = image;
[/Quote]

我试了,也是不行。 本来就没什么区别嘛。
能不能把你存取的也贴出来? 我看别的帖子上说,存与取的方式不一样,容易产生此类错误。。
rekym 2011-03-16
  • 打赏
  • 举报
回复
MemoryStream MS = new MemoryStream(data);
Bitmap image = new System.Drawing.Bitmap(MS);
this.picIndiPhoto.Image = image;
Daqing 2011-03-16
  • 打赏
  • 举报
回复
FileStream ms =new FileStream(openFileDialog1.FileName, FileMode.Open,FileAccess.Read, FileShare.Read, 20480, false);

//这样试一下,不要用stream
Daqing 2011-03-16
  • 打赏
  • 举报
回复
想起来了,汗颜!
Daqing 2011-03-16
  • 打赏
  • 举报
回复
Encoding.UTF8.GetBytes(ds.Tables[0].Rows[0]["photo"].ToString());
试试看
my_lover1314 2011-03-16
  • 打赏
  • 举报
回复
期待问题的解决者来帮忙。。。
熙熙 2011-03-16
  • 打赏
  • 举报
回复
MemoryStream ms = new MemoryStream((Byte[])model.Photo);
my_lover1314 2011-03-16
  • 打赏
  • 举报
回复
错在哪我想应该是找到了,应该是在另外一句:

Encoding encoding;
encoding = System.Text.Encoding.GetEncoding("GB2312");
model.Photo = encoding.GetBytes(ds.Tables[0].Rows[0]["photo"].ToString());

因为在我调试的过程中发现 存的时候 model.photo = byte[21123];
而取出来显示的时候 model.photo = byte[13];
可能就是因为存与取所采用的方式不同。 可是
model.Photo = encoding.GetBytes(ds.Tables[0].Rows[0]["photo"].ToString());
这句该怎么写呢?
熙熙 2011-03-16
  • 打赏
  • 举报
回复
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
userAdd.Photo = this.Serialize(openFileDialog1.FileNames[0]);
}

下面是序列化
private byte[] Serialize(string fullname)
{
if (fullname == null || fullname.Length < 1) return null;
byte[] data = null;
if (File.Exists(fullname))
{
lock (this)
{
FileStream sr = new FileStream(fullname, FileMode.Open, FileAccess.Read);
try
{
byte[] buffer = new byte[sr.Length];
sr.Read(buffer, 0, buffer.Length);
data = buffer;
}
finally
{
sr.Close();
}
}
}

return data;
}

读取图片
MemoryStream ms = new MemoryStream((Byte[])model.Photo);
this.pbxPicture.Image = Image.FromStream(ms);

Daqing 2011-03-16
  • 打赏
  • 举报
回复
语句没有错

// 加一句这个更好,设置当前流的位置为流的开始
ms.Seek(0, SeekOrigin.Begin);
ms.Read(picbyte, 0, Convert.ToInt32(ms.Length));


读取时最好判断model.Photo是否为null
rekym 2011-03-16
  • 打赏
  • 举报
回复
Model model = SQLOperateClass.SelectByID(k);

model.Photo //这个取的是Byte[] 吗??

byte[] Photo = (Byte[])cmd.ExecuteScalar("select image from Users");

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧