同时使用 Excel 和 Microsoft SQL 服务器连接字符串

Using both Excel and Microsoft SQL Server Connection Strings

我的任务是将新记录从 excel table 添加到 Microsoft SQL 服务器 table,为此,我计划使用 ADODB对象;但是,我的 SQL 语句没有执行,我认为这与我的连接字符串有关。

在我的代码中,我写下了我最终打算使用的 SQL 语句,但是当我尝试时:

    sql = "SELECT * FROM [Provider=SQLOLEDB;Data Source=hpwfh-ssql01; _ 
Initial Catalog=HPW DataIntegrated Security=SSPI;Trusted_Connection=Yes].Hubspot_Data"

(一个简单的 select 语句)它甚至没有用。

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

附带说明:table 与数据库同名

对于这段代码,我遇到了三个不同的错误:

  1. Microsoft Access 数据库引擎无法找到对象 'Area' 确保该对象存在并且您拼写了它的名称和路径名 正确。 (而且我没有拼错Hubspot_Data)

  2. 外部 table 不是预期的格式。

  3. Microsoft Acess 数据库引擎无法打开或写入文件 (我的文件路径)'\我的Documents\Provider=SQLOLEDB.XLSX'。它已经打开 仅供其他用途使用,或者您需要获得查看和写入其权限的权限 数据.

很明显,计算机去错了地方去检索它需要的 table,我不知道哪里错了。感谢您的帮助。

从 "SQL Server Object explorer" 获取数据库的属性并复制完全相同的连接字符串。然后将其复制到项目的 "appsettings.json" 文件中。看起来像这样:

"connectionStrings": {
    "ApiDbConnectionString": "Server=(localdb)\mssqllocaldb;Database=ApiDB;Trusted_Connection=True;"
  }

然后您需要在连接字符串中创建一个对象并使用该对象打开到数据库的连接,然后将您的 SQL 查询写入数据库

首先,您需要 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