2010-05-20 45 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 
     } 
    } 
}