将“经典 ASP/ADO”应用程序从 SQL Server 2008 移动到 SQL Server 2017 时使用什么连接字符串和/或 OLEDB/ODBC 驱动程序?

kev*_*kev 1 sql-server ado

我的“经典 ASP”应用程序在 Windows Server 2003 上,使用 ADO 连接到 SQL Server 2008 数据库。

数据库服务器正在从变更升级,并将运行 SQL Server 2017。

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

到目前为止,我还没有成功地从旧的 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
Run Code Online (Sandbox Code Playgroud)

我可以让这个程序在新服务器上运行 - 带有 SQL Server 2017 的服务器,并且它成功连接。

此连接字符串有效:

Driver={SQL Server Native Client 11.0};Server=192.168.0.23;Database=TestDB;Uid=user1;Pwd=xxx;
Run Code Online (Sandbox Code Playgroud)

这也有效:

Driver={SQL Server};Server=192.168.0.23;Database=TestDB;Uid=user1;Pwd=xxx;
Run Code Online (Sandbox Code Playgroud)

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

现在,我知道对于 ADO,我没有指定 Provider,所以我认为它默认为 MSDASQL,Microsoft 的 ODBC OLEDB 提供程序。

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

我已经用这些结果尝试了这些连接字符串:

Driver={SQL Server};Server=<IP address of SQL2008 server>;Database=yyy;Uid=xxx;Pwd=xxx;
Run Code Online (Sandbox Code Playgroud)

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

Driver={SQL Server};Server=<IP address of SQL2017 server>;Database=TestDB;Uid=user1;Pwd=xxx; 
Run Code Online (Sandbox Code Playgroud)

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

[ODBC SQL SERVER DRIVER]SQL Server 不存在或访问被拒绝

“旧的”{SQL Server} 驱动程序是否能够连接到 SQL2017?

Driver={SQL Server Native Client 11.0};Server=192.168.0.23;Database=TestDB;Uid=user1;Pwd=user1;
Run Code Online (Sandbox Code Playgroud)

这立即失败并显示以下消息:

[ODBC 驱动程序管理器]未找到数据源名称且未指定默认驱动程序

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

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

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

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

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

Dav*_*oft 6

ADO 不使用 ODBC 术语中的“驱动程序”。它使用 OleDb“提供者”。SQL Sever 有三个 OleDb 提供程序(除了 MSDASQL,用于 ODBC 驱动程序的 OleDb 提供程序对于 SQL Server 来说不是必需的,因为它具有本机 OleDb 提供程序)。

自 Windows Server 2003 以来,旧的 SQLOLEDB 提供程序已包含在 Windows 中,它可能是从旧服务器连接的正确选择。当前是 MSOLEDBSQL,可在此处获得,应尽可能使用,而不是旧的 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
Run Code Online (Sandbox Code Playgroud)

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

c:\test> cscript test.vbs
Run Code Online (Sandbox Code Playgroud)