2010-07-31 161 views
2

獲得一個SQL VARBINARY記錄我這行代碼使用微軟企業庫

byte[] field1 = (reader.GetSqlBinary(reader.GetOrdinal("Field1")).Value; 

這是一個SqlDataReader

我試圖將代碼轉換爲使用企業庫數據訪問塊,但不能弄清楚如何使用IDataReader得到byte[]

我已經通過MS文檔有一個很好的看,但沒有找到任何幫助。

回答

2

我想嘗試的第一件事是(其中ireader.GetOrdinal("Field1")):

byte[] firstTry = (byte[])reader.GetValue(i); 

如果失敗了,也許是:

byte[] secondTry; 
using (var ms = new MemoryStream()) 
{ 
    byte[] buffer = new byte[8040]; // sql page size 
    int read; 
    long offset = 0; 
    while ((read = (int)reader.GetBytes(i, offset, buffer, 0, buffer.Length)) > 0) 
    { 
     ms.Write(buffer, 0, read); 
     offset += read; // oops! added this later... kinda important 
    } 
    secondTry = ms.ToArray(); 
} 

還要注意行爲可以變化略有不同是否指定了CommandBehavior.SequentialAccess

+0

+1謝謝Mark。 「第一件事」是一種享受。看着它我不敢相信我沒有那樣做。 Carling顯然正在生效。時間關閉視覺工作室並玩Spotify! – Matt 2010-07-31 20:32:18

+0

@Matt - 我很高興第一個人工作 - 我錯過了第二個關鍵步驟; p現在修復了,爲了「長尾巴」的好處。 – 2010-07-31 22:02:33