本地 DB 抛出字节数组截断长度为 8000 的异常

Posted

技术标签:

【中文标题】本地 DB 抛出字节数组截断长度为 8000 的异常【英文标题】:Local DB throws Byte array truncation to a length of 8000 exception 【发布时间】:2011-12-08 13:13:28 【问题描述】:

我正在尝试从 Map 控件获取快照作为 WritableBitmap,将其转换为字节数组并将其保存在本地数据库中。它工作正常(我可以将字节数组转换回图像),直到我将更改提交到数据库。此时它会抛出异常“字节数组截断到长度为 8000”。我没有找到任何关于字节数组限制的文档。有谁知道如何增加8000的限制?我的字节数组是我的模型的成员:

private byte[] _locationImage;
[Column]
public byte[] LocationImage

   get  return _locationImage; 
   set
   
      if (_locationImage != value)
      
         NotifyPropertyChanging("LocationImage");
         _locationImage = value;
         NotifyPropertyChanged("LocationImage");
      
   

【问题讨论】:

你用的是什么“数据库”? 该字段是否曾在数据库端定义为 varbinary(8000)? 【参考方案1】:

如果您查看the SQL Compact docs,您会看到二进制或varbinary 字段最多可以有8000 个字节,这告诉我byte[] 列被映射到varbinary。要让它存储比这更大的数据,您需要让引擎使用image 字段类型。这可能就像像这样更新Column 属性一样简单(未经测试):

[Column(DbType="image")]
public byte[] LocationImage  ... 

【讨论】:

VARBINARY(MAX) 在 SQL Compact 中不可用? 很抱歉回答迟了。这正是我想要的。我没想到要查看 SQL CE 文档。谢谢。

以上是关于本地 DB 抛出字节数组截断长度为 8000 的异常的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server Compact 4.0 图像列被截断为 8000

RODBC :: sqlSave()创建表,警告:在列中截断为255个字节?

RODBC::sqlSave() 创建表,警告:在列中截断为 255 个字节?

两个十六进制字节数组的异或函数

如何在 C# 中转换为字节时截断字符串?

Sqlserver 报错“参数数据类型 ntext/text 对于 replace 函数的参数 1 无效”的解决方案及原理分析扩展