2010-05-20 41 views
0

什麼是讀取使用SqlDataReader對象從SQL Server字節(8-16 K)的最有效的方式是最有效的方式。 看來我知道2種方式:什麼是讀取從SQL Server使用SqlDataReader的(C#)字節數

byte[] buffer = new byte[4096]; 
MemoryStream stream = new MemoryStream(); 
long l, dataOffset = 0; 
while ((l = reader.GetBytes(columnIndex, dataOffset, buffer, 0, buffer.Length)) > 0) 
{ 
    stream.Write(buffer, 0, buffer.Length); 
    dataOffset += l; 
} 

reader.GetSqlBinary(columnIndex).Value 

數據類型爲IMAGE

回答

0

GetSqlBinary將整個數據加載到內存中,而你的第一種方法將成批讀它這將需要更少的內存,特別是如果你只需要處理的部分二進制文件。但再次它取決於你打算什麼用二進制做,它會如何處理。

+0

我想轉換所有字節到base64 – eccentric 2010-05-20 16:01:22

0

對於該斑點的大小,我會去與GetSqlBinary。下面我還包括一個Base64編碼示例;這樣的事情:

using (SqlConnection con = new SqlConnection("...")) { 
    con.Open(); 
    using (SqlCommand cmd = con.CreateCommand()) { 
     cmd.CommandText = "SELECT TOP 1 * FROM product WHERE DATALENGTH(picture)>0"; 
     using (SqlDataReader reader = cmd.ExecuteReader()) { 
      reader.Read(); 

      byte[] dataBinary = reader.GetSqlBinary(reader.GetOrdinal("picture")).Value; 
      string dataBase64 = System.Convert.ToBase64String(dataBinary, Base64FormattingOptions.InsertLineBreaks); 

      //TODO: use dataBase64 
     } 
    } 
}