sql-server - 同时使用 Excel 和 Microsoft SQL Server 连接字符串
问题描述
我的任务是将excel表中的新记录添加到Microsoft SQL Server表中,为此,我计划使用ADODB对象;但是,我的 SQL 语句没有执行,我认为这与我的连接字符串有关。
在我的代码中,我写下了我计划最终使用的 SQL 语句,但是当我尝试时:
sql = "SELECT * FROM [Provider=SQLOLEDB;Data Source=hpwfh-ssql01; _
Initial Catalog=HPW DataIntegrated Security=SSPI;Trusted_Connection=Yes].Hubspot_Data"
(一个简单的选择语句)它甚至没有工作。
Sub update1()
Dim cn, rs As Object, path As String, name As String, sql As String, file As String
path = "T:\Marketing\Data Analytics\Hubspot data for SQL"
name = "Hubspot_Data"
file = path & "\" & name & ".xlsx"
Set cn = CreateObject("ADODB.Connection")
With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.connectionstring = "Data Source=" & file & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;Readonly=false;IMEX=0"";"
.Open
End With
sql = "INSERT INTO [Provider=SQLOLEDB;Data Source=hpwfh-ssql01;Initial Catalog=Hubspot_Data;Integrated Security=SSPI;Trusted_Connection=Yes].Hubspot_Data " & _
"SELECT * FROM (SELECT * FROM [Provider=SQLOLEDB;Data Source=hpwfh-ssql01;Initial Catalog=Hubspot_Data;Integrated Security=SSPI;Trusted_Connection=Yes].Hubspot_Data" & _
"EXCEPT SELECT * FROM [hubspot-crm-exports-sql-data-20$])"
Set rs = cn.Execute(sql)
End Sub
只是一个旁注:表的名称与数据库相同
对于这段代码,我得到了三个不同的错误:
Microsoft Access 数据库引擎无法找到对象“区域”确保对象存在并且正确拼写其名称和路径名。(而且我没有拼错 Hubspot_Data)
外部表不是预期的格式。
Microsoft Acess 数据库引擎无法打开或写入文件(我的文件路径)'\My Documents\Provider=SQLOLEDB.XLSX'。它已被其他用户独占打开,或者您需要权限才能查看和写入其数据。
很明显,计算机去错误的地方检索它需要的表,我不知道我哪里出错了。谢谢您的帮助。
解决方案
首先,您需要 2 个连接 - 一个用于 SQLSvr,一个用于 Excel。然后查询您的源 (Excel) 并单独插入 SQLSvr。您将无法将这些混合到一个查询中。
Sub SelectInsert()
Dim cn As Object, rs As Object, sql As String
Dim conSQL As Object, sInsertSQL As String
'---Connecting to the Data Source---
Set cn = CreateObject("ADODB.Connection")
With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
.Open
End With
Set conSQL = CreateObject("ADODB.Connection")
With cn
.Provider = "SQLOLEDB"
.ConnectionString = "Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;"
.Open
End With
'---Run the SQL SELECT Query---
sql = "SELECT * FROM [Sheet1$]"
Set rs = cn.Execute(sql)
Do 'the insert. Each rs(n) represents an Excel column.
sInsertSQL = "INSERT INTO table VALUES(" & rs(0) & ";" & rs(1) & ";" & rs(2) & ")"
conSQL.Execute sInsertSQL
rs.MoveNext
Loop Until rs.EOF
'---Clean up---
rs.Close
cn.Close
conSQL.Close
Set cn = Nothing
Set conSQL = Nothing
Set rs = Nothing
End Sub
推荐阅读
- c# - C# AES 解密序列化对象然后反序列化它
- python - 如何取消标记替换的 spacy.tokens.token.Token?
- android - 如何在 onStop() 中保存 UI 视图或 UI 屏幕?
- c# - C# - Bash 进程产生截断的 StandardOutput
- r - 可视化多重插补数据的多重密度图
- sorting - 在这种情况下 std::sort 安全吗
- docker - 如果可以省略,那么在 Dockerfile 中通告 VOLUME 的目的是什么?
- certificate - CBOR 错误:不允许尾随数据字节
- flutter - 如何在 Flutter 中按下按钮时显示自定义弹出窗口?
- math - 如何将前一个百分比与金额分开