如何从SQL Server读取blob?

时间:2015-09-01 07:41:22

标签: c# sql-server

我有一个带有varbinary列的表:

My table {
   Id int primary key,
   FileBody varbinary(max)     
}

现在我想读它。很简单,我可以使用此answer中的代码,但它会将varbinary转换为byte[],我想避免使用它。

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

2 个答案:

答案 0 :(得分:4)

您可以使用SqlDataReader.GetBytes从列中读取数据或使用SqlDataReader.GetSqlBytesSqlDataReader.GetStream

示例:

使用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;

答案 1 :(得分:4)

我相信你正在寻找这个:

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

GetStream方法:

  

将Stream,image,varbinary,UDT和variant数据类型检索为Stream。