一般来说,连接sql server有两种方式,一种是使用sql server自带的客户端工具,如企业管理器、查询分析器、事务分析器等;另一种是使用用户开发的客户端终端程序,如ASP脚本、VB程序等,客户端程序使用ODBC或OLE DB连接sql server。下面,我们将从这两种连接方式来谈谈如何解决连接失败的问题。
一、"sql server 不存在或访问被拒绝"
(图片1)
“sql server 不存在或访问被拒绝”错误通常是最容易出现的,因为出错的原因很多,所以要检查的方面很多。
一般来说有几种可能:
1、网络连接问题;
2、sql server 服务器问题;
3、服务器端网络配置问题;
4、客户端网络配置问题。
首先,我们检查网络连接:
1、ping 服务器 IP 地址。首先先关闭服务器和客户端的防火墙,这是为了排除防火墙软件可能会阻塞对ping、telnet等的响应。然后开始ping服务器的IP地址。如果ping服务器的IP地址不成功,说明物理连接有问题。此时检查硬件设备,如网卡、HUB、路由器等。
2、ping 服务器名称。如果失败,则说明名称解析有问题。这时候需要检查是否安装了Netbuis协议,DNS服务是否正常。
其次,使用telnet命令查看sql server server的工作状态。如果命令执行成功,可以看到屏幕闪烁后左上角光标一直在闪烁,说明sql server server工作正常,正在监听1433端口的TCP/IP连接;如果命令返回“无法打开连接”信息的错误,说明服务器没有启动sql server服务,或者服务器端没有开启TCP/IP协议,或者服务器没有监听sql server的默认端口1433。
最后,我们要检查服务器和客户端的网络配置。服务器检查是否启用了命名管道;是否开启了TCP/IP协议等。我们可以使用sql server自带的服务器网络工具来检查。
点击:程序->微软sql server server网络使用工具;打开工具后,可以在“常规”中看到服务器启用了哪些协议。默认情况下,我们启用命名管道和 TCP/IP 协议。点击TCP/IP协议,选择“属性”,我们可以查看SQK Server服务的默认端口设置。一般来说,我们使用sql server的默认端口1433。如果选择了“隐藏服务器”,则表示客户端无法通过枚举服务器看到该服务器,起到保护作用,但不影响连接。
(图片2)
(图片3)
接下来我们去客户端检查客户端的网络配置。我们也可以使用sql server自带的客户端网络使用工具来查看,不同的是这个工具是在客户端运行的。点击:程序->微软sql server客户端网络使用工具 打开工具后,在“常规”项中可以看到客户端启用了哪些协议。同样,我们需要启用命名管道以及 TCP/IP 协议。点击TCP/IP协议,选择“属性”,可以查看客户端默认连接端口设置,端口必须与服务器一致。
(图片4)
通过以上检查,基本可以排除第一个错误。
二、“无法连接服务器,用户xxx登录失败”
(图片5)
这个错误的原因是用户无法使用sql server登录账号(例如sa)连接,因为sql server使用的是“Windows only”的认证方式。解决方法如下:
1、在服务器端使用企业管理器,选择“使用Windows身份验证”连接sql server;
2、展开“sql server group”,右击sql server server的名字,选择“Properties”,然后选择“Security”选项卡;
3、在“Authentication”下美篇提示网络连接失败,选择“sql server and Windows”;
4、重启sql server服务。
在上述解决方法中,如果在步骤1中使用“使用Windows身份验证”连接sql server失败,则修改注册表以解决问题:
1、点击“开始”“运行”,输入regedit,回车进入注册表编辑器;
2、展开注册表项并浏览到以下注册表:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\mssqlServer\mssqlServer];
3、在屏幕右侧找到名称“LoginMode”,双击编辑双字节值;
4、将原来的值从1改为2,点击“确定”;
5、关闭注册表编辑器;
6、重启sql server服务。
此时用户可以在企业管理器中成功使用sa创建新的sql server注册,但仍然无法使用windows认证方式连接sql server。这是因为sql server中有两个默认的登录账号:
内置\管理员
\Administrator 已删除。
要恢复这两个帐户,可以使用以下方法:
1、打开企业管理器,展开服务器组,然后展开服务器;
2、展开安全,右击登录,然后点击新建登录;
3、在名称框中,输入 BUILTIN\Administrators;
4、在“服务器角色”选项卡中,选择“系统管理员”;
5、点击“确定”退出;
6、使用同样的方法添加\Administrator登录。
说明:
以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\mssqlServer\mssqlServer\LoginMode 的值决定了 sql server 将采用何种身份验证模式。
1、使用“Windows 身份验证”模式;
2、 表示使用混合模式(windows认证和sql server认证)。
三、提示连接超时
(图片6)
如果遇到第三个错误,一般表示客户端已经找到服务器,可以连接了,但是出现错误是因为连接时间比允许的时间长。这种情况比较少见。通常发生在用户在互联网上运行企业管理器注册另一台同样在互联网上的服务器时,连接速度很慢,可能会导致上述超时错误。在某些情况下,此类错误也可能是由于局域网中的网络问题造成的。
要解决此类错误,您可以修改客户端的连接超时设置。默认情况下,通过企业管理器注册另一个sql server的超时设置为4秒,查询分析器为15秒。
具体步骤为:
企业管理器中的设置:
1、在企业管理器中,选择菜单上的“工具”,然后选择“选项”;
2、在弹出的“SQL Server企业管理器属性”窗口中,点击“高级”选项卡;
3、在“连接设置”下“登录超时(秒)”右侧的框中输入一个较大的数字美篇提示网络连接失败,例如 30。
查询分析器中的设置:
点击“工具”->“选项”->“连接”;将登录超时设置为更大的数字,将连接超时设置为 0。
四、应用连接失败
以上三种报错信息均出现在sql server自带的客户端工具中。我们也会在应用中遇到类似的错误信息,例如:
Microsoft OLE DB Provider for sql server (0x80004005)
[DBNETLIB][ConnectionOpen (Connect()).]找不到指定的 sql server。
Microsoft OLE DB Provider for sql server (0x80004005)
用户“sa”登录失败。原因:未与受信任的 sql server 连接关联。
用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序错误“80004005”。
[Microsoft][ODBC sql server Driver]超时。
如果遇到连接超时错误,可以在程序中修改Connection对象的超时设置,然后打开连接。例如:
<%
设置 Conn = Server.CreateObject("ADODB.Connection")
DSNtest="DRIVER={sql server};SERVER=ServerName;UID=USER;PWD=password;DATABASE=mydatabase"
Conn.Properties("Connect Timeout") = 15 'in seconds
Conn.open DSNtest
%>
如果遇到查询超时错误,可以在程序中修改Recordset对象的超时设置,然后打开结果集。例如:
将 cn 调暗为新的 ADODB.Connection
Dim rs As ADODB.Recordset
。 . .
cmd1 = txtQuery.Text
设置 rs = 新 ADODB.Recordset
rs.Properties("命令超时") = 300
'同样以秒为单位,如果设置为0表示无限
rs.Open cmd1, en
rs.MoveFirst
。 . .
五、总结
本文重点介绍大多数用户在使用sql server过程中常见的连接失败错误,重点介绍在使用sql server客户端工具和用户开发的应用程序两种情况下如何诊断和解决连接失败错误。看完这篇文章,相信各位读者会对sql server的连接工作原理、认证方式和应用开发有更全面深入的了解。