我有一个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行发生错误。我很困惑为什么这个脚本几乎在所有服务器上工作,并且只在少数几个服务器上失败。它们连接到的数据库在结构方面在每个服务器上是相同的,它只是更改的数据。
答案 0 :(得分:2)
通过执行以下操作解决了以下问题: 打开SQL Server配置管理器并转到MSSQLSERVER的协议 - > TCP / IP。在“IP地址”选项卡中,我注意到地址为127.0.0.1的IP2处于活动状态但未启用。已更改为已启用和已重新启动的SQL服务。我的VB脚本现在成功打开了与127.0.0.1的连接。
答案 1 :(得分:0)
这不是数据库错误,而是客户端工具或配置错误
失败的服务器可能会:
编辑:
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)
对WSAStartup
和WSACleanup
的调用也可能不匹配。如果您经常拨打WSACleanup
,那么套接字就会停止工作。 SQL客户端也会中断 - 这通常是远程数据库服务器的情况(与通过命名管道访问的本地实例相反)。
答案 4 :(得分:-1)
尝试禁用WPF,这应解决问题(控制面板 - > Windows防火墙)。
如果没有,那么您也可以停止防火墙服务(来自Services.msc - > Windows个人防火墙)