我的数据库列的类型是 varbinary(max), (sql server 2008)。
Linq to Sql Classes (vs 2010, fx4) 为我生成了以下代码:
[global::System.Data.Linq.Mapping.ColumnAttribute
(Storage="_Raw", DbType="VarBinary(MAX)", UpdateCheck=UpdateCheck.Never)]
public System.Data.Linq.Binary Raw
{
get
{
return this._Raw;
}
...
我想像这样插入一个 1.5 Mb 的位图文件:
var fi = new FileInfo(@"c:\whatever.bmp");
var fs = fi.OpenRead();
var newImage = new Image();
//var buffer = new byte[fs.Length];
//fs.Read(buffer, 0, (int)fs.Length);
//newImage.Raw = buffer;
var buffer = new byte[4000];
fs.Read(buffer, 0, 4000);
newImage.Raw = buffer;
using (var dc = new MyDataContext())
{
dc.Images.InsertOnSubmit(newImage);
dc.SubmitChanges();
}
fs.Dispose();
我注释掉的行是我想要的代码,但它们在 SubmitChanges 调用中引发异常。下面的线工作正常。但是如果我将缓冲区大小增加到 4001,我会得到同样的异常。我需要有一个更像 1,500,000 的 fs.Length。
异常消息是“字符串或二进制数据将被截断”。谁能解释这个错误并告诉我如何让它工作?