0

我已经在我的机器上安装了 SQL Server Express,并启用并配置了 FILESTREAM 以从 SQL Server 存储和检索 pdf。我已经成功地将文件作为 BLOB 上传到我的表中,但我很难检索它们。我的方法是使用一个临时目录来创建文件,以便我可以打开它们。我有以下代码:

我已经配置了 ole 自动化

sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
sp_configure 'Ole Automation Procedures', 1;  
GO  
RECONFIGURE;  
GO  

我的表 BusinessFiles 中有以下记录:

    FileID          415578C7-B058-49A5-A1E4-5A4E7218EA19
    InvoiceID   99999
    FileName    file1
    FileType    pdf
    ImageFile   0x255044462D312…

下一段代码显然将从文件流创建文件。

DECLARE 
@FILE VARBINARY(MAX)
,@FILEPATH VARCHAR(MAX)
,@ObjectToken INT
,@FileType VARCHAR(MAX)
,@FILENAME VARCHAR(MAX)

Set @FILENAME = (SELECT [FileName] FROM BusinessFiles where FileID = '415578C7-B058-49A5-A1E4-5A4E7218EA19')
Set @FileType = (SELECT FileType FROM BusinessFiles where FileID = '415578C7-B058-49A5-A1E4-5A4E7218EA19')
SELECT @FILE = ImageFile FROM BusinessFiles where FileID = '415578C7-B058-49A5-A1E4-5A4E7218EA19'
Set @FILEPATH = CONCAT('C:\Users\user\Desktop\', @FILENAME,'.',@FileType)

EXEC sp_OACREATE 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @FILE
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FILEPATH, 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken 
Go

此代码运行,我收到命令已成功完成消息。但是我的文件夹 C:\Users\user\Desktop 中没有任何内容。有什么我想念的吗?谢谢;

我已经验证了文件路径是正确的,并且所有的设置都很好。

4

1 回答 1

0

了解 SQL Server 的权限将解决 SaveToFile 问题。就我而言,我将 SavetoFile 目录更改为 C:\temp。

于 2020-04-14T17:40:40.350 回答