将 "classic ASP/ADO" 应用程序从 SQL Server 2008 移动到 SQL Server 2017 时,什么连接字符串和/或 OLEDB/ODBC 驱动程序?

What connection string and or OLEDB/ODBC drivers when moving "classic ASP/ADO" app from SQL Server 2008 to SQL Server 2017?

我的 "classic ASP" 应用程序在 Windows Server 2003 上,并使用 ADO 连接到 SQL Server 2008 数据库。

正在对数据库服务器进行升级,并将 运行ning SQL Server 2017。

我试图证明旧的应用程序仍然可以工作,连接到这个更新版本的 SQL 服务器。

到目前为止,我还没有成功地从旧的 WS2003 机器连接到 SQL Server 2017 安装。

我不确定我需要安装什么 OLEDB 或 ODBC 提供程序或驱动程序才能使其正常工作,以及最终需要连接字符串是什么。

我已经创建了一个小型演示程序来使用与实际应用程序相同的代码来建立连接。本质上,我在这里所做的只是提供一个连接字符串并尝试连接。这是使用 ADO 的 VB6:

Private Sub btnConnect_Click()

    Dim theConnection As New ADODB.Connection

    theConnection.ConnectionString = Text1.Text 
    theConnection.Open ConnectString

    If theConnection.State = 1 Then
        MsgBox ("connected ")
    Else
        MsgBox ("failed to connect ")
    End If

End Sub

我可以将此程序安装到新服务器上的 运行 - 带有 SQL Server 2017 的服务器,并且连接成功。

此连接字符串有效:

Driver={SQL Server Native Client 11.0};Server=192.168.0.23;Database=TestDB;Uid=user1;Pwd=xxx;

这也有效:

Driver={SQL Server};Server=192.168.0.23;Database=TestDB;Uid=user1;Pwd=xxx;

这是现有代码用于连接的确切格式。

现在,我了解到对于ADO,我没有指定Provider,所以我认为它默认为MSDASQL,Microsoft's OLEDB provider for ODBC

因此,要使它从 WS2003 应用程序服务器连接,我遇到了问题。这可能吗?

我尝试了这些连接字符串,结果如下:

Driver={SQL Server};Server=<IP address of SQL2008 server>;Database=yyy;Uid=xxx;Pwd=xxx;

这有效 - 这是现有的 SQL2008 数据库。

Driver={SQL Server};Server=<IP address of SQL2017 server>;Database=TestDB;Uid=user1;Pwd=xxx; 

这需要大约 20-30 秒才能失败并显示此消息:

[ODBC SQL SERVER DRIVER]SQL Server does not exist or access denied

"old" {SQL Server} 驱动程序是否能够连接到 SQL2017?

Driver={SQL Server Native Client 11.0};Server=192.168.0.23;Database=TestDB;Uid=user1;Pwd=user1;

这会立即失败并显示消息:

[ODBC Driver Manager]Data Source Name not found and no default driver specified

这是否意味着{SQL Server Native Client 11.0} ODBC 驱动程序未安装在WS2003 机器上?可以安装吗?

我尝试在此处查看 Microsoft 的各种 ODBC 驱动程序安装:https://docs.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-2017

但是,我不确定我是否需要这样做,或者它们是否与 WS2003 兼容。

用于 SQL 服务器的 Microsoft ODBC 驱动程序 17:至少需要 Windows Server 2008 R2。 Microsoft ODBC 驱动程序 13 和 11 也是如此。我确实安装了版本 11,尽管它可能不受支持。我确实使用它成功地为旧的 SQL2008 数据库创建了一个新的 ODBC 数据源,但没有为 SQL2017 数据库创建新的数据源。

我需要做什么来解决这个问题?

ADO 不使用 "Drivers" 那是 ODBC 术语。它使用 OleDb "Providers"。 SQL 服务器有三个 OleDb 提供程序(除了 MSDASQL,用于 ODBC 驱动程序的 OleDb 提供程序对于 SQL 服务器来说不是必需的,因为它具有本机 OleDb 提供程序) .

旧的 SQLOLEDB 提供程序自 Windows Server 2003 以来已包含在 Windows 中,它可能是从旧服务器连接的正确选择。当前的是 MSOLEDBSQL,可用 here,应尽可能使用而不是旧的 SQLOLEDB 或更新的但已弃用的 SQLNCLI 提供程序。

这是一个 VbScript,您可以使用它来测试来自任何 Windows 计算机的连接。

Wscript.Echo "SQLOLEDB"
set theConnection = createobject("ADODB.Connection")
theConnection.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI"
theConnection.Open ConnectString

Wscript.Echo "SQLNCLI"
set theConnection = createobject("ADODB.Connection")
theConnection.ConnectionString = "Provider=SQLNCLI;Data Source=localhost;Integrated Security=SSPI"
theConnection.Open ConnectString

Wscript.Echo "MSOLEDBSQL"
set theConnection = createobject("ADODB.Connection")
theConnection.ConnectionString = "Provider=MSOLEDBSQL;Data Source=localhost;Integrated Security=SSPI"
theConnection.Open ConnectString

将其保存到 .vbs 文件并运行使用以下命令:

c:\test> cscript test.vbs