私のデータベース列のタイプは 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 に増やすと、同じ例外が発生します。fs.Length を 1,500,000 以上にする必要があります。
例外メッセージは、「文字列またはバイナリ データが切り捨てられます」です。誰かがこのエラーを説明し、それを機能させる方法を教えてもらえますか?