使用SqlDataReader(C#)从SQL Server读取多个字节最有效的方法是什么

使用SqlDataReader(C#)从SQL Server读取多个字节最有效的方法是什么,c#,sql,performance,C#,Sql,Performance,使用SqlDataReader从SQL Server读取字节(8-16K)的最有效方法是什么。 我似乎知道两种方法: byte[] buffer = new byte[4096]; MemoryStream stream = new MemoryStream(); long l, dataOffset = 0; while ((l = reader.GetBytes(columnIndex, dataOffset, buffer, 0, buffer.Length)) > 0) {

使用SqlDataReader从SQL Server读取字节(8-16K)的最有效方法是什么。 我似乎知道两种方法:

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;
}


数据类型为IMAGE

将整个数据加载到内存中,而您的第一种方法将分块读取数据,这将占用更少的内存,特别是当您只需要部分处理二进制文件时。但这再一次取决于您将如何处理二进制文件以及如何处理它。

对于这个blob大小,我将使用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 
        }
    }
}

我想把所有字节都转换成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 
        }
    }
}