【发布时间】:2021-04-29 03:55:34
【问题描述】:
我有一个 Excel 文件,一些用户将其用作前端,我希望能够通过 VBA 将一般文件(如 PDF、图像、word 文档...)上传到 SQL Server。
在搜索了很多网站后,我整理了一些代码,但我不知道在 VBA SQL 变量(INSERT INTO 查询)中写什么来上传一些通用文件(例如 PDF)
VBA 代码:
Sub SaveAsBinary()
Dim adoStream As Object
Dim adoCmd As Object
Dim strFilePath As String
Dim adoCon As Object
Dim SQL As String
Dim FileNameStr as String
Set adoCon = CreateObject("ADODB.Connection")
Set adoStream = CreateObject("ADODB.Stream")
Set adoCmd = CreateObject("ADODB.Command")
'--Open Connection to SQL server
adoCon.CursorLocation = 3 'adUseClient
adoCon.Open = "Driver={SQL Server Native Client 11.0};" _
& "MyServerName;" _
& "Database=MyDatabaseName;" _
& "Uid=MyUserName;" _
& "Pwd={MyPassword};" _
& "Connection Timeout=30;"
'----
strFilePath = Range("a1").Value 'keep File path to upload (simple local computer path)
FileNameStr = Dir(strFilePath )
SQL = "INSERT INTO Tbl_Test VALUES (FileNameStr, ??)" '‹‹---What value should be here for loading a pdf file (for example)
adoStream.Type = 1 'adTypeBinary
adoStream.Open
adoStream.LoadFromFile strFilePath 'It fails if file is open
With adoCmd
.CommandText = SQL ' Query
.CommandType = 1 ' adCmdText
'---adding parameters
.Parameters.Append .CreateParameter("@FileName", 20, 1, 0, 1)
.Parameters.Append .CreateParameter("@MyFile", 204, 1, adoStream.Size, adoStream.Read)
'---
End With
adoCmd.ActiveConnection = adoCon
adoCmd.Execute
adoCon.Close
End Sub
原始代码取自: https://usefulgyaan.wordpress.com/2014/09/30/store-and-fetch-files-sql-server-tables/
Sql server 中的表:
CREATE TABLE [dbo].[Tbl_Test](
[FileName] [nvarchar](200) NOT NULL,
[MyFile] [varbinary](max) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
一栏是文件名,一栏是文件本身。
注意:SQL Server 位于没有共享文件夹/BLOB/FTP 的远程服务器上。
【问题讨论】:
-
“不起作用” 不是有用的错误描述。也没有问题要回答。请参阅 [mvce] 和 How to Ask 以改进您的问题。
-
[mvce] = minimal reproducible example(对不起)。
-
Pᴇʜ ,我更新了我的问题,希望现在问题更清楚了
-
还是没有错误说明?出了什么问题? • 此外,没有任何问题。
-
我猜它应该是
VALUES (?, ?),就像原始代码一样。在这里您需要指定您的文件名.CreateParameter("@FileName")而不是原始代码中的ID,在这里.CreateParameter("@MyFile"您将文件发送为adoStream。
标签: sql sql-server excel vba tsql