2011-07-28 6 views
2

データベースの種類はvarbinary(max)、(sql server 2008)です。私はそうのような1.5 Mbのビットマップファイルを挿入したいlinq-to-sqlクラスを使用して> 4000バイトをvarbinary(max)に書き込む

[global::System.Data.Linq.Mapping.ColumnAttribute 
(Storage="_Raw", DbType="VarBinary(MAX)", UpdateCheck=UpdateCheck.Never)] 
public System.Data.Linq.Binary Raw 
{ 
    get 
    { 
    return this._Raw; 
    } 
    ... 

:SQLのクラス(2010対、FX4)へ

LINQのは、私のためにこのコードを生成した

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(); 

ラインをI私がコードを欲しいものにコメントしましたが、SubmitChangesコールで例外がスローされます。下の行は正常に動作します。しかし、バッファサイズを4001に増やしても、同じ例外が発生します。私は150万人ほどの長さを持つ必要があります。

例外メッセージは「文字列またはバイナリデータが切り捨てられます。」です。誰もがこのエラーを説明し、それを動作させる方法を教えてもらえますか?

+0

あなたが言及した例外は、あなたが取得しているSQLエラーか何か他のものですか? – leppie

+0

SubmitChangesの呼び出しでスローされた例外からのメッセージです。私はそれがSQL Serverからのメッセージであり、ちょうど.net例外に包まれていると思われる。私はそれをより良く説明するために編集しました。 – wozza

+0

私はSQLに問題があると思われます。 Linq2SQLを使わずにデータを挿入して確認してください。 – leppie

答えて

0

varbinary(max)データタイプは2^31-1バイトまでサポートされています。つまり、問題の原因となっているこのデータタイプではない可能性があります。

例外の種類を教えてください。エラーメッセージは、coming from the databaseと非常によく似ています。

実際にはvarbinary(max)であることを確認するために、列の定義を再度チェックします。

SQLプロファイラを使用して、実際にデータベースに送信されている文を確認してください。 Linq To Sqlが送信している4001のうち2^31-1バイトを何とか生成していない限り、問題の原因となっているLinq To Sqlはそうではありません。

+0

Stackoverflowには、ドキュメントの素早い確認で解決された多くの質問があります。あなたは明らかにあなたの宿題を終えました。意図しない侮辱にごめんね。 私はまだ例外の種類を知ることに興味があります。 SQLエラー(これはあなたの他のコメントに基づいて期待しているもの)をラップするSqlExceptionかもしれないようです。この場合、問題の範囲からSqlを削除すると、問題を再現しようとします。これはまた、@レッピーが推薦したものです。 Exception.InnerExceptionをチェックして、コア例外を見つけます。 –

関連する問題