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

时间:2009-12-07 04:50:53

标签: sql database vbscript ado

我有一个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行发生错误。我很困惑为什么这个脚本几乎在所有服务器上工作,并且只在少数几个服务器上失败。它们连接到的数据库在结构方面在每个服务器上是相同的,它只是更改的数据。

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

失败的服务器可能会:

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

编辑:

SQL Server SSL加密,server side, is described here。而且KB 316898也是

  • “服务器端”仅需要服务器证书,所有连接都已加密
  • “客户端”需要客户端证书,并且是可选的,仅适用于该客户端

某些客户端库(特别是MS JDBC)不支持此功能。

如果我猜对了,你将拥有基于服务器的客户端或服务器SSL加密集(你的脚本充当客户端)

答案 2 :(得分:0)

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

你可以用以下方法测试:

telnet 127.0.0.1 1433

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

答案 3 :(得分:0)

WSAStartupWSACleanup的调用也可能不匹配。如果您经常拨打WSACleanup,那么套接字就会停止工作。 SQL客户端也会中断 - 这通常是远程数据库服务器的情况(与通过命名管道访问的本地实例相反)。

答案 4 :(得分:-1)

  1. 尝试禁用WPF,这应解决问题(控制面板 - > Windows防火墙)。

  2. 如果没有,那么您也可以停止防火墙服务(来自Services.msc - > Windows个人防火墙)

相关问题