首页 > 解决方案 > 无法使用 SQL 复制文件

问题描述

我是 SQL 编码的新手,希望有人可以帮助我。我有一个我无法弄清楚的旧程序的问题。该程序允许用户上传保存在单独目录中的文件,并将文件的名称和路径保存在 SQL 数据库中。我必须从数据库中检索路径和文件名,然后将文件复制到用户可以检索文件的另一个目录。我没有数据库或服务器的管理员权限。代码工作正常,直到它到达 Write 方法然后它中断并且我收到消息错误 -2146825287 创建对象。

这就是存储在数据库中的文件路径。

/TADS_FileArchive/820045_1_10192000_143042_82-0045-1.doc

我曾尝试将斜杠更改为反斜杠,但没有奏效。我什至将文件的确切路径放在@IMG_PATH 中,但没有运气,仍然会收到有关Write 方法的错误消息。我阅读并尝试了我所知道的一切来解决问题,但没有任何运气。谢谢你的帮助。

USE TADS
DECLARE @NAME VARCHAR(MAX),
    @DOWNLOAD_PATH VARCHAR(MAX),
    @IMG_PATH varchar(MAX),
    @TIMESTAMP VARCHAR(MAX),
    @ObjectToken INT, 
    @START_TIME SMALLDATETIME,
    @END_TIME SMALLDATETIME,
    @hr int

SET @START_TIME = '01/01/2018'
SET @END_TIME = '12/31/2018'

SET @DOWNLOAD_PATH = 'D:\testfile\'

DECLARE IMGPATH CURSOR FAST_FORWARD FOR 
    SELECT FILE_NAME, FILE_PATH from ATTACHED_FILES where DATE_ADDED between @START_TIME and @END_TIME

OPEN IMGPATH 

FETCH NEXT FROM IMGPATH INTO @NAME, @IMG_PATH  

WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @IMG_PATH = 'D:\TADS\TADS_SVN_WORKING_DIR\TADS_DEV2_WC'+@IMG_PATH
        SET @TIMESTAMP = @DOWNLOAD_PATH + @NAME

        PRINT @TIMESTAMP

        EXEC @hr = sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
        IF @hr <> 0  
BEGIN  
    RAISERROR('Error %d creating object.', 16, 1, @hr)
    RETURN
END
    EXEC @hr =  sp_OASetProperty @ObjectToken, 'Type', 1
    IF @hr <> 0  
BEGIN  
    RAISERROR('Error %d creating object.', 16, 1, @hr)
    RETURN
END
    EXEC @hr =  sp_OAMethod @ObjectToken, 'Open'
    IF @hr <> 0  
BEGIN  
    RAISERROR('Error %d creating object.', 16, 1, @hr)
    RETURN
END
    EXEC @hr =  sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH
    IF @hr <> 0  
BEGIN  
    RAISERROR('Error %d creating object.', 16, 1, @hr)
    RETURN
END
    EXEC @hr =  sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @TIMESTAMP, 2
    IF @hr <> 0  
BEGIN  
    RAISERROR('Error %d creating object.', 16, 1, @hr)
   RETURN
END
    EXEC @hr =  sp_OAMethod @ObjectToken, 'Close'
    IF @hr <> 0  
BEGIN  
    RAISERROR('Error %d creating object.', 16, 1, @hr)
   RETURN
END
    EXEC @hr =  sp_OADestroy @ObjectToken

    FETCH NEXT FROM IMGPATH INTO @NAME, @IMG_PATH  
END 

CLOSE IMGPATH
DEALLOCATE IMGPATH

标签: sqlsql-server

解决方案


推荐阅读