如何使用linq将图像保存到sql-server?

时间:2011-07-29 18:20:17

标签: c# sql-server linq

我正在尝试使用linq将图像保存到sql-server中。我将字段类型设置为image,在我的应用程序中,我使用fileupload控制器将图像文件读取为byte []。问题就在于,当我评估图像字段时,它无法将byte []转换为二进制。你认为这是保存图像的好方法吗?

我的代码:

Stream imgStream = FileUpload1.PostedFile.InputStream;
int imglen = FileUpload1.PostedFile.ContentLength;
string imgContentType = FileUpload1.PostedFile.ContentType;
string imgName = FileUpload1.PostedFile.FileName;
byte[] imgBinaryData = new byte[imglen];
int n = imgStream.Read(imgBinaryData, 0, imglen);
ImgStore info = new ImgStore();
info.pic = imgBinaryData;// it cannot implictly convert type 'byte[]' to Linq.Binary
info.type = imgContentType;
info.fileName = imgName;

2 个答案:

答案 0 :(得分:3)

Storing images with LINQ to SQL: Converting byte array or stream to Binary

要将字节数组转换为LINQ二进制文件,可以使用二进制构造函数:

MyObject.BinaryProperty = new Binary(bytes);

<强>参考

答案 1 :(得分:3)

使用LINQ来存储图像将是非常低效的,因为所有API都需要至少一个完整的内存中字节数组的图像大小。即使在中等负载下,当虚拟大阵列副本中的内存耗尽时,它也会快速中断。我建议您使用流式语义,这样可以避免将大字节数组传入和传出ADO.Net API的问题。有关完整的工作代码,请参阅这两篇文章,它将HTTP POST上传文件作为流并以缓冲流(chuncked)方式将其传输到数据库中,同样以类似的方式将图像从数据库传输到HTTP响应:

该代码也可在CodeProject上找到。