【问题标题】:How to save image into sql-server using linq?如何使用 linq 将图像保存到 sql-server?
【发布时间】:2011-07-29 18:20:17
【问题描述】:

我正在尝试使用 linq 将图像保存到 sql-server。我将字段类型设置为图像,在我的应用程序中,我使用文件上传控制器将图像文件读取为字节 []。问题来了,当我评估图像字段时,它无法将 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 美分,你应该保存路径而不是图像。保存图像可能会导致您的数据库很快变得非常大并降低性能。

标签: c# sql-server linq


【解决方案1】:

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

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

MyObject.BinaryProperty = new Binary(bytes);

参考文献

【讨论】:

    【解决方案2】:

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

    代码也可以在CodeProject上找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多