2016-04-20 6 views
0

は、私は次のインタフェースを持っている:byte []値をSQL型Imageにマップするにはどうすればよいですか?

IEnumerator<SqlDataRecord> IEnumerable<SqlDataRecord>.GetEnumerator() 
{ 
    var SQLRow = new SqlDataRecord(
     new SqlMetaData("id", SqlDbType.BigInt), 
     new SqlMetaData("image", SqlDbType.Image)); 

    foreach (ImageModel item in this) 
    { 
     SQLRow.SetSqlInt64(0, item.Id); 
     // here is the problem (this is a byte[] variable) 
     SQLRow.SetSqlByte(1, item.Image); 

     yield return SQLRow; 
    } 
} 

は、どのように私はImagebyte[]をマッピングすることができますか?または、私は別の方法で画像を保存することができますか?

ありがとうございます。

答えて

1

foreachの中にnew SqlDataRecord(..)を入れる必要があります。そうしないと、常に同じオブジェクトが返され、値が上書きされます。どのように使用するのか分かりませんが、問題があるかもしれません。あなたはimageタイプはMS SQLで廃止されているようにデータを格納するためvarbinary(max)またはvarbinary(YOUR MAX LENGTH)タイプを使用する場合、それが優れている値の使用にSQLRow.SetSqlBytes(1, new SqlBytes(...)); またはSQLRow.SetSqlBinary(...) or SQLRow.SetBytes(...)

を設定するには

0

バイト配列をそのままSQL Serverに保存することができます。この方法で、アプリケーションで簡単に取り戻すことができます。

+0

OK。パフォーマンスの問題はどうですか?私が 'NVARCHAR(MAX)'と 'Image'の違いとして保存すると、何が欠点ですか? –

+0

byte []を使用すると、nvarchar(max)よりもパフォーマンスが向上します。nvarcharは、さまざまなエンコーディングをサポートする文字列を意味します。ケースについては、http://stackoverflow.com/questions/25400555/save- and-retrieve-image-binary-from-sql-server-using-entity-framework-6 – Naganathan

関連する問題