【问题标题】:What connection string and or OLEDB/ODBC drivers when moving "classic ASP/ADO" app from SQL Server 2008 to SQL Server 2017?将“经典 ASP/ADO”应用程序从 SQL Server 2008 移动到 SQL Server 2017 时,有哪些连接字符串和/或 OLEDB/ODBC 驱动程序?
【发布时间】:2019-10-03 17:31:33
【问题描述】:

我的“经典 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

我可以让这个程序在新服务器上运行 - 带有 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 的 ODBC OLEDB 提供程序。

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

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

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

这个 WORKS - 这是现有的 SQL2008 数据库。

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

这需要大约 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;

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

[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-server-2017

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

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

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

【问题讨论】:

    标签: sql-server ado


    【解决方案1】:

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

    自 Windows Server 2003 起,旧的 SQLOLEDB 提供程序已包含在 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
    

    【讨论】:

    • 非常感谢您提供非常清晰和翔实的答案。您提供的脚本示例也是检查连接和连接字符串的一种非常好且快速的方法。就我而言,我仍然无法连接,但我现在认为这一定是防火墙问题或其他网络问题,而不是 OLEDB 问题或 W2003 和 SQL2017 之间的某些不兼容问题。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2015-09-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    相关资源
    最近更新 更多