可以使用ADODB将Excel连接到Azure SQL Server DW吗?

时间:2019-12-11 00:31:27

标签: sql-server excel vba azure-sql-database

我正在尝试从Excel到SQL Server的较新版本运行简单查询。过去,我已经做过很多次了,但这始终是对标准SQL Server DB执行的。现在,我正在使用一种新的动物,即Azure SQL Server数据仓库。我正在使用非常通用的VBA代码连接到DW。

Sub TryMe()

'Initializes variables
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim ConnectionString As String
Dim StrQuery As String

pswd = "my_pwd"
user = "my_used_ID"
dbName = "my_DB_name"
server = "server_name.database.Windows.net"

'Setup the connection string for accessing MS SQL database
   'Make sure to change:
       '1: PASSWORD
       '2: USERNAME
       '3: REMOTE_IP_ADDRESS
       '4: DATABASE
    ConnectionString = "Provider=SQLOLEDB;Password=pswd;User ID=user;Data Source=server;Use Encryption for Data=False;Initial Catalog=dbname"

    'Opens connection to the database
    cnn.Open ConnectionString
    'Timeout error in seconds for executing the entire query; this will run for 15 minutes before VBA timesout, but your database might timeout before this value
    cnn.CommandTimeout = 900

    'This is your actual MS SQL query that you need to run; you should check this query first using a more robust SQL editor (such as HeidiSQL) to ensure your query is valid
    StrQuery = "SELECT TOP 10 * FROM myBigTable"

    'Performs the actual query
    rst.Open StrQuery, cnn
    'Dumps all the results from the StrQuery into cell A2 of the first sheet in the active workbook
    Sheets(1).Range("A2").CopyFromRecordset rst
End Sub

这应该是一件非常简单的事情,但是我不断收到一条错误消息:“ SQL Server不存在或访问被拒绝”。

此行发生错误:

cnn.Open ConnectionString

我设置了对Microsoft ActiveX Data Objects 2.0 Library的引用。

有没有人尝试过这个并且实际上使它起作用?

1 个答案:

答案 0 :(得分:1)

您没有将变量粘贴到连接字符串中。而且旧的receiveAndConvert()提供程序太旧了,无法连接到Azure。您需要从here安装新的服务器。

SQLOLEDB

如果您不想安装MSOLEDBSQL,则可以使用newer ODBC drivers之一。使用ConnectionString = "Provider=MSOLEDBSQL;Password=" & pswd & ";User ID=" & user & ";Data Source=" & server & ";Use Encryption for Data=False;Initial Catalog=" & dbName & "" 时,连接字符串有点奇怪。 EG:

OleDb Provider for ODBC Drivers