【问题标题】:How to get image from SQL Server to C# via SqlCommand?如何通过 SqlCommand 从 SQL Server 获取图像到 C#?
【发布时间】:2015-09-28 07:13:03
【问题描述】:

我正在尝试将图像转换为字节数组,但它会使应用程序崩溃。

错误是这样的:

反序列化对象时出错。读取 XML 数据时已超出最大数组长度配额 (16384)。可以通过更改创建 XML 阅读器时使用的 XmlDictionaryReaderQuotas 对象的 MaxArrayLength 属性来增加此配额

这是我的代码:

if (dr["Photo"] != DBNull.Value)
{
    rider.Photo = (byte[])dr["Photo"];
}

有没有更好的方法来做到这一点?有用的东西?

编辑:所以,我认为这与图像尺寸太大而无法通过网络服务有关。我编辑了 webconfig 文件并更改了 ReaderQuotes 标记值,如下所示:

<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647"
        maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

即使这样,输出也是一样的。

【问题讨论】:

  • 您的错误消息是关于 XML 而不是 SQL。请显示异常所指的代码。
  • 应用程序在我将照片转换为字节数组的那一行崩溃了。
  • 我真的不相信您显示的错误消息与代码相关联。我假设 dr 是某种类型的 SQL DataReader
  • 我在 web.config 文件中编辑了 MaxArrayLength 属性。放一个像 maxArrayLength="2147483647" 这样的大数字。但它仍然崩溃。我应该提到的一件事是它是一个 wcf 应用程序。

标签: c# sql sql-server image sqlcommand


【解决方案1】:

这样就可以了

if (dr["Photo"] != DBNull.Value)
{
    Byte[] data = (Byte[])(dr["Photo"]);
    MemoryStream mem = new MemoryStream(data);
    rider.Photo = Image.FromStream(mem);
}

而我认为应该是.Photo 而不是.Image

你可以去The maximum array length quota (16384) has been exceeded看看

【讨论】:

  • 不,@TahreemIqbal 它应该是 System.Drawing 命名空间而不是 System.Net.Mime.MediaTypeNames 您可以指定代码中是否有任何歧义 System.Drawing.Image.FromStream(mem);
猜你喜欢
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多