[DBNETLIB][ConnectionOpen(PreLoginHandshake())。]一般网络错误-在VB脚本中连接到SQL数据库

[DBNETLIB][ConnectionOpen(PreLoginHandshake())。]一般网络错误-在VB脚本中连接到SQL数据库,sql,database,vbscript,ado,Sql,Database,Vbscript,Ado,我有一个VB脚本,它连接到本地SQL数据库以检索值。完全相同的脚本在大约100台服务器上运行,但少数服务器会产生此错误: [DBNETLIB][ConnectionOpen(PreLoginHandshake())。]一般网络错误。查看您的网络文档 以下是运行的代码: Function GetPrimaryServerID On Error Resume Next Set objConnection = CreateObject("ADODB.Connection") Set objRecord

我有一个VB脚本,它连接到本地SQL数据库以检索值。完全相同的脚本在大约100台服务器上运行,但少数服务器会产生此错误:

[DBNETLIB][ConnectionOpen(PreLoginHandshake())。]一般网络错误。查看您的网络文档

以下是运行的代码:

Function GetPrimaryServerID
On Error Resume Next
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open "Provider=SQLOLEDB;Data Source=127.0.0.1;Initial Catalog=xxx;User ID=xxx;Password=xxx"
sqlquery = "SELECT ServerID FROM tblSettings"
objRecordSet.Open sqlquery,objConnection
objRecordSet.MoveFirst
GetPrimaryServerID = objRecordSet("ServerID")
objRecordSet.Close
objConnection.Close 
End Function

尝试打开连接字符串时,错误出现在第5行。我不明白为什么这个脚本可以在几乎所有的服务器上运行,却只能在少数服务器上失败。它们连接到的数据库在结构上在每台服务器上都是相同的,只是数据发生了变化

这不是数据库错误,而是客户端工具或配置错误

出现故障的服务器可能会:

  • 具有不同级别的SQL Server(安装/包含service pack)
  • 仅为Windows身份验证配置
  • 拥有较旧的MDAC(链接到SQL Service pack、OS Service pack等)
编辑:

SQL Server SSL加密。还有

  • “服务器端”只需要服务器证书,所有连接都是加密的
  • “客户端”需要客户端证书,并且是可选的,并且仅适用于该客户端
某些客户端库(特别是MS JDBC)不支持此功能

如果我猜对了,您将基于服务器设置客户端或服务器SSL加密(您的脚本充当客户端)


这不是数据库错误,而是客户端工具或配置错误

出现故障的服务器可能会:

  • 具有不同级别的SQL Server(安装/包含service pack)
  • 仅为Windows身份验证配置
  • 拥有较旧的MDAC(链接到SQL Service pack、OS Service pack等)
编辑:

SQL Server SSL加密。还有

  • “服务器端”只需要服务器证书,所有连接都是加密的
  • “客户端”需要客户端证书,并且是可选的,并且仅适用于该客户端
某些客户端库(特别是MS JDBC)不支持此功能

如果我猜对了,您将基于服务器设置客户端或服务器SSL加密(您的脚本充当客户端)


如果数据库未配置为侦听TCP/IP通信,则可能会失败。错误“命名管道提供程序,错误:0-管道的另一端没有进程。”指向该方向

您可以通过以下方式进行测试:

telnet 127.0.0.1 1433

若要配置服务器侦听的位置,请对SQL server 2000使用“SQL server网络实用程序”,或对SQL server 2005及更高版本使用“SQL server外围配置”。

如果未将数据库配置为侦听TCP/IP通信,则可能会失败。错误“命名管道提供程序,错误:0-管道的另一端没有进程”。“指向那个方向

您可以通过以下方式进行测试:

telnet 127.0.0.1 1433

要配置服务器侦听的位置,请对SQL server 2000使用“SQL server网络实用程序”,或对SQL server 2005及更高版本使用“SQL server外围区域配置”。

通过执行以下操作修复了此问题:
打开SQL Server Configuration Manager并转到MSSQLSERVER的协议->TCP/IP。在“IP地址”选项卡中,我注意到地址为127.0.0.1的IP2处于活动状态,但未启用。更改为启用并重新启动SQL服务。我的VB脚本现在成功地打开了与127.0.0.1的连接。

通过执行以下操作修复了该问题翼: 打开SQL Server Configuration Manager并转到MSSQLSERVER的协议->TCP/IP。在“IP地址”选项卡中,我注意到地址为127.0.0.1的IP2处于活动状态,但未启用。已更改为启用并重新启动SQL services。我的VB脚本现在已成功打开到127.0.0.1的连接

  • 尝试禁用WPF,这将解决问题(控制面板->Windows防火墙)

  • 如果没有,则还可以停止防火墙服务(从Services.msc-->Windows personal firewall)

  • 尝试禁用WPF,这将解决问题(控制面板->Windows防火墙)

  • 如果没有,则还可以停止防火墙服务(从Services.msc-->Windows personal firewall)


  • 也可能是对
    WSAStartup
    WSACleanup
    的调用不匹配。如果调用
    WSACleanup
    太频繁,则套接字停止工作。SQL客户端也将中断-这通常是远程DB服务器的情况(与通过命名管道访问的本地实例相反).

    所有服务器都有Windows 2003 R2 x64 SP2。所有服务器都使用SQL Server 9.0.3042 64位。这包括成功的和失败的服务器。我已经仔细检查了失败的服务器,只是为了确定。我不确定如何检查MDAC版本。我刚刚注意到,在失败的服务器上,当打开SQL Server Management Studio时,我无法检查连接到127.0.0.1时,我必须连接到服务器名称。但是,在其他每台服务器上,我都可以连接到127.0.0.1。这是通过Management Studio尝试在故障服务器上连接到127.0.0.1时出现的错误:已成功与服务器建立连接,但在预登录握手期间发生错误。当连接到SQL Server 2005时,此故障可能是因为在默认设置下,SQL Server不允许远程连接。(提供程序:命名管道提供程序,错误:0-管道的另一端没有进程。)(Microsoft SQL Server,错误:233)@VBScripter:能否ping 127.0.0