您的位置:首页 > 数据库

c#把图片以二进制的形式写入ACCESS数据库

2013-06-01 01:09 190 查看
今天把文件写入到数据库中的时候出现了问题,问了很多人和查了很多资料,结果都没有找到解决的办法,后面经过不断的尝试,终于解决了这个问题。下面把重要的部分跟大家分享下。

有的时候需要把图片存在数据库中以达到用户看不到图片的效果,在这里主要讲解以二进制的形式存储方法。
这里的图片有两种,一种是在本地,一种是通过GDI画好的。

在本地的图片写入数据库中的时候

FileStream fs = new FileStream(dt.FileName, FileMode.Open, FileAccess.ReadWrite);

这儿是把本地图片转换为内存流,FileName是文件的全路径名,dt是打开文件对话框。后面的参数不用管,照写就可以了。

byte[] ms = new byte[fs.Length];

//这儿是神明一个字节数组,数组的长度是long类型的

fs.Read(ms, 0, ms.Length); 
这儿是吧图片内存流写到字节数组中。

好了 现在已经得到了图片的二进制数组,下面就是把数组中的数据写入到数据库中。

创建数据库,创建一个数据表,表中有一个字段pic,注意了,这儿pic字段的类型一定要是OLE对象类型,要不然存储不了。

然后就是写入数据库字串,至于连接就不讲在这儿,string str = "insert into database values(@pic)"。

这儿是重点了,这儿不能写成"insert into database values('"+str+"')",一定要写成上面那样,

然后加上com(OledCommand类型).arameters.AddWithValue("@pic", str);

然后刷新就可以了。这样写入到数据库中就完成了。

如果是内存流的形式,那么就不能这样写了,

System.IO.MemoryStream io;
这个时候不能 byte[] ms = new byte[fs.Length];fs.Read(ms, 0, ms.Length); 如果这样写了之后读取出来的图片就会报错,错误类型为类型不符。
要改成 byte[] ms = io.ToArray();
后面就是一样的了。 
好了 重要的部分就这些,其他的没有什么了。 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息