使用SqlDataReader(C#)从SQL Server读取多个字节最有效的方法是什么
使用SqlDataReader从SQL Server读取字节(8-16K)的最有效方法是什么。 我似乎知道两种方法:使用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) {
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
}
}
}