C# 如何从SQL Server读取blob?

C# 如何从SQL Server读取blob?,c#,sql-server,C#,Sql Server,我有一个带有varbinary列的表: My table { Id int primary key, FileBody varbinary(max) } 现在我想读它。很简单,我可以使用这样的代码,但它将varbinary转换为byte[],我想避免使用它 是否可以将varbinary放入MemoryStream而不转换为字节[]?用户可以从列中读取数据或使用或 例如: 使用getBytes SqlCommand command = new SqlCommand( ..

我有一个带有varbinary列的表:

My table {
   Id int primary key,
   FileBody varbinary(max)     
}
现在我想读它。很简单,我可以使用这样的代码,但它将
varbinary
转换为
byte[]
,我想避免使用它

是否可以将
varbinary
放入
MemoryStream
而不转换为
字节[]

用户可以从列中读取数据或使用或

例如:

使用getBytes

 SqlCommand command = new SqlCommand( .... );
 ...
 SqlDataReader sqlReader = command.ExecuteReader(CommandBehavior.SequentialAccess);
 byte[] outbyte = new byte[bufferSize]; 
 sqlReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);
使用GetSqlBytes

 SqlCommand command = new SqlCommand( .... );
 ...
 SqlDataReader sqlReader = command.ExecuteReader(CommandBehavior.SequentialAccess);
 byte[] outbyte = sqlReader.GetSqlBytes(1).Buffer;

我相信你正在寻找这个:

SqlCommand command = new SqlCommand();
SqlDataReader reader = command.ExecuteReader();
System.IO.Stream stream = reader.GetStream(1); // 1 is the index of the column
方法:

以流的形式检索二进制、image、varbinary、UDT和variant数据类型


没有转换,可以将其看作是将数据从sql server移动到memorystream的缓冲区。为了节省内存,你可以使用更小的缓冲区。你可以这样做
newmemorystream(myByteArray)
它看起来很不错。我想这就是我要找的,谢谢!