2009-12-07 223 views
1

我有一个VB脚本连接到本地SQL数据库来检索一个值。完全相同的脚本在大约100台服务器上运行,但少数服务器产生此错误:[DBNETLIB] [ConnectionOpen(PreLoginHandshake())。]一般网络错误 - 连接到VB脚本中的SQL数据库

[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日线出现的错误。我很困惑,为什么这个脚本在几乎所有的服务器上工作,只有少数人失败。它们所连接的数据库在每个服务器的结构上都是相同的,它只有那些发生变化的数据。

回答

2

修复了以下问题: 已打开SQL Server配置管理器,并进入了MSSQLSERVER协议 - > TCP/IP在IP地址选项卡中,我注意到IP2的地址为127.0.0.1已激活但未启用。已更改为启用并重新启动的SQL服务。我的VB脚本现在成功地打开了连接到127.0.0.1。

0

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

发生故障的服务器可能会:

  • 有不同的级别是SQL服务器的安装/包括服务包)
  • 仅针对Windows身份验证进行配置
  • 具有较旧的MDAC(链接到SQL Service Pack,OS Service Pack等)

编辑:

SQL Server SSL加密,server side, is described here。而在KB 316898

  • “服务器端”只需要一个服务器证书和所有连接进行加密
  • “客户端”需要客户端证书,是可选的,仅适用于客户端

某些客户端库(特别是MS JDBC)不支持这一点。

如果我猜得不错,你就会有客户端或基于服务器的服务器SSL加密集(您的脚本作为客户端)

+0

所有服务器具有Windows 2003 R2 SP2 64位。 所有服务器都使用SQL Server 9.0.3042 64位。 这包括成功和失败的服务器。我已经仔细检查了发生故障的服务器,以确保安全。我不知道如何检查MDAC版本。 我刚刚注意到,在失败的服务器上,当打开SQL Server Management Studio时,我无法连接到127.0.0.1,我必须连接到服务器名称。但是,在其他所有服务器上,我都可以连接到127.0.0.1。 – VBscripter 2009-12-07 05:50:43

+0

这是尝试通过Management Studio连接到发生故障的服务器上的127.0.0.1时发生的错误:与服务器建立了连接,但在登录前握手过程中发生错误。连接到SQL Server 2005时,此故障可能是由于在默认设置下,SQL Server不允许远程连接。 (提供程序:命名管道提供程序,错误:0 - 没有进程在管道的另一端。)(Microsoft SQL Server,错误:233) – VBscripter 2009-12-07 05:53:42

+0

@VBScripter:你可以ping 127.0.0.1吗?这些服务器是否配置为encrpytion? – gbn 2009-12-07 07:09:14

0

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

您可以测试与:

telnet 127.0.0.1 1433 

要配置在服务器监听,使用'SQL服务器网络实用程序”的SQL Server 2000,或 “SQL Server外围应用配置” 为SQL Server 2005及以上

+0

好的我已经完成了telnet测试,并且失败了,无法连接到端口1433.服务器正在使用SQL Server 2005,我已经打开了SQL Server表面区域配置,但是您能否告知我去哪里配置服务器听? – VBscripter 2009-12-07 06:25:47

+0

@VBScripter:单击“服务和连接的表面区域配置”,然后单击“MSSQLSERVER” - >“数据库引擎” - >“远程连接”,并确保选择了TCP/IP选项之一 – Andomar 2009-12-07 06:55:18

+0

'local远程连接“和”同时使用TCP/IP和命名管道“,但我仍然无法通过管理工作室连接到127.0.0.1或通过端口1433连接到127.0.0.1。 – VBscripter 2009-12-07 06:59:53

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

  2. 如果没有,那么你也可以停止该服务的防火墙(从SERVICES.MSC - > Windows个人防火墙)

+0

这将有助于您解答很多问题,以解释为什么您认为Windows防火墙可能会出现问题。 – Aiken 2015-01-28 07:51:55