C# 从SQL检索VarBinary数据并保存图像/文件

C# 从SQL检索VarBinary数据并保存图像/文件,c#,sql,sql-server,C#,Sql,Sql Server,当我使用SQL语句时 SELECT File_Data FROM Attachments WHERE UserID = '12345' AND FileNames = 'testing1.jpg' 图片下载后看起来很棒。但是,如果我放入一个存储过程,它会在我的名为C:\Testing\的文件夹中创建testing1.jpg的文件,但它没有将数据写入图像中,并且无法正确显示。下面是我必须调用存储过程并编写它的内容。你知道我做错了什么吗 出于测试目的: strfilename=testing

当我使用SQL语句时

SELECT File_Data 
FROM Attachments 
WHERE UserID = '12345' AND FileNames = 'testing1.jpg'
图片下载后看起来很棒。但是,如果我放入一个存储过程,它会在我的名为
C:\Testing\
的文件夹中创建
testing1.jpg
的文件,但它没有将数据写入图像中,并且无法正确显示。下面是我必须调用存储过程并编写它的内容。你知道我做错了什么吗

出于测试目的:

  • strfilename=
    testing1.jpg
  • userid=
    12345
代码:

SQL Server存储过程:

 ALTER PROCEDURE [dbo].[GET_ATTACHMENT]
     @User_ID int,
     @FileName nvarchar(250)
 AS
 BEGIN
    SET NOCOUNT ON;

DECLARE @FileData varbinary(max)

    Set @FileData = (SELECT File_Data FROM Attachments 
       WHERE UserID = @User_ID and 
       FileNames = @FileName);

    SELECT @FileData

END
一些建议:

byte[]fileData=(byte[])dr.GetValue(0)处设置断点
以查看在将数据写入文件之前是否返回了任何数据

使用命令行为。默认值

使用
CommandBehavior.SequentialAccess
时,请尝试使用SqlDataReader的方法


最后,请将您的SP更改为返回用户ID,以检查是否返回了任何内容。

返回的数据为:System.Byte[]返回的值为空。@mrmcg即使在使用
命令行为时也是如此。默认值
?那么你能运行任何存储过程吗?是的。它将运行,但没有数据通过。
 ALTER PROCEDURE [dbo].[GET_ATTACHMENT]
     @User_ID int,
     @FileName nvarchar(250)
 AS
 BEGIN
    SET NOCOUNT ON;

DECLARE @FileData varbinary(max)

    Set @FileData = (SELECT File_Data FROM Attachments 
       WHERE UserID = @User_ID and 
       FileNames = @FileName);

    SELECT @FileData

END