Windows应用程序,本地数据库连接的问题

来源:互联网 发布:钻石分级 知乎 编辑:程序博客网 时间:2024/05/31 18:37

错误:"在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) "

 

      上述错误我遇到两种情况,一种是在打开打开SQL Server 2005时弹出的,另一种是在应用程序连接SQL Server 2005时出现的.归纳了一下,由以下几个原因:

1.数据库引擎没有启动.

      有两种启动方式:

     (1)开始->程序->Microsoft SQL Server 2005->SQL Server 2005外围应用配置器,在打开的界面单击"服务的连接的外围应用配置器",在打开的界面中找到Database Engine,单击"服务",在右侧查看是否已启动,如果没有启动可单击"启动",并确保"启动类型"为自动,不要为手动,否则下次开机时又要手动启动;

     (2)可打开:开始->程序->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager,选中SQL Server 2005服务中SQL Server(MSSQLSERVER) ,并单击工具栏中的"启动服务"按钮把服务状态改为启动;

      使用上面两种方式时,有时候在启动的时候可能会出现错误,不能启动,这时就要查看"SQL Server 2005配置管理器"中的SQL  Server 2005网络配置->MSSQLSERVER协议中的VIA是否已启用,如果已启用,则把它禁止.然后再执行上述一种方式操作就可以了.

2.进行远程连接时,是否已允许远程连接.

      SQL Server 2005 在默认情况下仅限本地连接.我们可以手动启用远程连接.在上面第一种方式中,找到Database Engine,单击"远程连接",在右侧将"仅限本地连接(L)"改为"本地连接和远程连接(R)",并选中"同时使用TCP/IP和named pipes(B)".

3.如果是远程连接,则还要查看连接数据库的语句是否正确,登录账户是否正确,密码是否正确等.

      我在一次局域网内连接数据库时,就要因为连接字符串出了问题,在局域网内一台机子连接另一台机子上数据库时,把server=装有数据库的另一台机子的IP.我在连接数据库时总是出现上面的错误,查了好长时间,后来发现,IP没有正确到传到连接字符串,原来我在连接时,使用的是本地,即127.0.0.1,输入的IP没有传到连接字符串.

     以上是我归纳的几种情况,希望能对遇到类似问题的朋友提供些帮助和参考.

发表于 @ 2007年05月07日 07:07:00|评论(19)|编辑

旧一篇: 使用Microsoft HTML Help Workshop制作CHM帮助文件

怎么才能AJAX技术入门?
学会AJAX几个核心技术点的理论和实践知识 学会AJAX应用的开发方式
Java 让开发自动化
创建一个运行测试的预订集成构建 预防和修复开发周期中出现的问题

评论

#lipp_man 发表于2007-05-07 23:31:19  IP: 222.69.214.*
你好!请问一下!我用的是VSTS2005 加自带的sqlserver2005试过你上面的两个办法还是不行会出现下面的错误。我GOOGLE了好久这个问题一直没有解决,谢谢!安装失败。异常:无法连接到 SQL Server 数据库。----------------------------------------故障的详细信息----------------------------------------System.Web.HttpException: 无法连接到 SQL Server 数据库。 ---> System.Data.SqlClient.SqlException: 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)
#zhangyang0402 发表于2007-05-08 12:51:22  IP: 58.82.209.*
"System.Web.HttpException: "你的程序是Web应用程序吧? 不好意思,我在上面没有注明我的程序是Windows应用程序,不过我觉得它们应该是差不多的.毕竟都是使用ADO.net,我现在刚刚开始接触ASP.net.我觉得你应该从下面几个地方检查一下:1.连接数据库字符串是否正确.2.检查进程里是否有sqlserver.exe进程正在运行.如果没有运行,可以按我上面讲的方法启动它.总的来说,你应该将你的程序和我在上面文章中的描述对照一遍.
#lipp_man 发表于2007-05-08 20:33:16  IP: 221.239.199.*
十分感谢你的帮助!上次贴出来的错误是我想用aspnet_regsql.exe来配置sqlserver provider是报的错!不过我在windows应用程序中也有这种错误!你在文章中的方法我都试过了。不过进程里面没有sqlserver.exe只有sqlservr.exe,但是我的SQLServer(SQLEXPRESS)显示正在运行,这里应该没有问题。我的问题是使用第一种字符串就可以顺利打开数据库,可以向数据库中插入数据返回值都是正缺的,但是数据库中就是没有我要插入的数据。和没有插入数据前一样!第一种:string conString = @"Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/Shop.mdf;Integrated Security=True;User Instance=True";
#lipp_man 发表于2007-05-08 20:55:45  IP: 221.239.199.*
十分感谢你的帮助!上次贴出来的错误是我想用aspnet_regsql.exe来配置sqlserver provider是报的错!不过我在windows应用程序中也有这种错误!你在文章中的方法我都试过了。不过进程里面没有sqlserver.exe只有sqlservr.exe,但是我的SQLServer(SQLEXPRESS)显示正在运行,这里应该没有问题。我的问题是使用第一种字符串就可以顺利打开数据库,可以向数据库中插入数据返回值都是正缺的,但是数据库中就是没有我要插入的数据。和没有插入数据前一样!第一种:string conString = @"Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/Shop.mdf;Integrated Security=True;User Instance=True";
#lipp_man 发表于2007-05-08 21:25:50  IP: 221.239.199.*
第二种:string conString = @"Data Source=127.0.0.1;Integrated Security = SSPI;Initial Catalog=shop";使用第二种就会报Systen.Data.SqlClient.SqlException:在建立与服务器的链接时错误。在连接到SQL Server 2005时,在默认情况下SQL Server 不允许进行远程连接可能导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)占用您的时间很不好意思!不过这个问题确实困扰我很久了,还请你在有时间的时候帮我看看!不甚感激!
#zhangyang0402 发表于2007-05-09 13:27:41  IP: 58.82.212.*
(1)哦,那是我昨天打错了,正确的进程就是sqlservr.exe;(2)我觉得可能还是你的连接数据库的字符串有问题.我没有使用过你说的两种连接字符串,我从网上看过说是有好多种.我现在使用的有以下两种:①String connectionstr="server=服务器名;Integrated Security=SSPI;database=你要连接的数据库名";②String connectionstr="server=服务器名;uid=登录用户名;pwd=登录名密码; database=你要连接的数据库名";其中,如果是连接本地的数据库,"服务器名"可以是localhost,127.0.0.1,或是你的机子的IP.如果是局域网内连接数据库,"服务器名"为数据库所在机子的IP.除了连接字符串,你再检查一下你的数据库操作的地方有没有什么错误,如查询,添加,修改,删除数据库中的数据时,语句是否正确.
#lipp_man 发表于2007-05-09 18:02:13  IP: 221.239.197.*
我在SQLSERVER EXPRESS也就是VS2005自带的数据库中服务器资源管理器中建立数据库,输入正确的名字还是会报上面的错误,但是用VS2005连SQLSERVER2000就都是正确的了!连接字符串像你那么写都是对的了!现在我只怀疑是VS自带的sqlserver的问题了!十分感谢,真的!好人一生平安!
#希望回帖 发表于2007-09-04 23:41:30  IP: 121.207.80.*
我用的好好的,突然也出现这个问题,除了我设过visio的数据启动源外,我的程序没有改过其它,原先全部没有问题,可是现在怪了。连接不会有错!因为没改过,上面所有方法全部试过,还是出错,原先发布一个可用的也出错。
#zhangyang0402 发表于2007-09-07 00:38:09  IP: 58.66.165.*
不好意思,这两天我们这里在不能上网了,耽搁回复你了两三天.你说你按照我上面的方法全部尝试了一遍还不行?1.那你的SQL Server 2005能正常打开和登录(sa)吗?2.你的应用程序和数据库的连接没有改动,可你只改了数据启动源,我不太清楚visio的数据启动源.要不你再试试把你做过的改动再重新改正过来试一下.3.要是还是不行,你把具体的出错情况再发给我.
#lijun 发表于2007-09-21 23:05:44  IP: 122.89.21.*
你好。我问两个问题1、能让2005sql启动的时候也能象sql2000那样在右下角出现图标吗:2、我在一台电脑安装应用软件与sql2005能正常访问数据库,但是在局域网中一台电脑装应用软件,一台电脑装sql2005的时候就不能正常连接数据库服务器了。ping ip ||服务器都正常!!!如能给我回复非常感谢!!!我的邮箱是bnsrlijun@126.com祝你工作顺利,中秋节快乐
#zhangyang0402 发表于2007-09-25 01:41:05  IP: 58.82.170.*
这么长时间才回复您,实在不好意思,这几天网速一直很慢,网页很难打开.(1)你说的SQL Server 2000是有企业管理器和服务管理器,服务管理器在任务栏内是有图标的.在2005中,将企业管理器和服务管理器合并到一起了,而且还多了配置管理器(可以进行一些基本配置,如远程访问,开放端口等).2005可能不能设置成任务栏下的图标.(2)你说的在局域网里,一台有应用软件的机器不能访问装有数据库服务器的另一台机器.我以前也遇到过.出现的错误就是我在博客里贴出的那张图片.后来,我检查到,装有应用软件的机器没有获得正确的数据库服务器所在机器的IP.我建议你再仔细检查一下,程序源代码,着重是连接数据库的部分,连接本地一般都很容易成功,在局域网内访问可能是ip或机器名不正确.如果还有问题,愿与您共同切磋!
#Karlen 发表于2007-10-06 11:17:57  IP: 218.75.65.*
你好,我用VS2005,sql server2000(不是sqlserver2005哦)也遇到了这个连接数据库问题了。我把错误产生过程描述一下:我自己的电脑装了VS2005,开发一个windwos程序姑且叫我的电脑为A吧。数据库是sqlserver2000,装在局域网里另一台电脑上,姑且称为B吧。B除了作为我设计的程序的数据库服务器,它本身还装有一个系统,该系统连接到本地服务器B上,不过是用的另一个数据库。SQL SERVER用的是混合验证方式。本来我的程序都差不多完成了,连接数据库是一点问题都没有。但是后来B系统出了问题重装了系统,后来我的程序就再也连接不上去了,提示也是这样的:在连接到SQL Server 2005时,在默认情况下SQL Server 不允许进行远程连接可能导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)首先sqlserver服务是启动了的,因为B的本地系统连接数据库是没有问题的;其次,连接字符串也是对的,B重装了,但A上没有动;而且在VS2005中的服务器管理中是可以看到B服务器名字的,但在数据库列表中就是取不到B里的数据库名(以前是能列出B中的所有数据库的),连接测试也是通不过。好多天了,实在是不知道那里出了问题,特请教各位高手指点指点啊。
#Karlen 发表于2007-10-06 11:19:46  IP: 218.75.65.*
对了我的email是lsqshufe#hotmail.com(#换成@),有知道的朋友请指点一下迷津,万分感谢!!
#zhangyang0402 发表于2007-10-07 23:38:28  IP: 117.76.195.*
我提出几点建议,你先一一尝试一下:1.你再按我在文章中的第2点说的试一下,看看B机的数据库服务器是否允许进行远程连接?2.查看一下A,B两台机子能否在局域网内进行正常通信,看是否在同一工作组中,共享文件能否进行正常访问等.总之,确保A,B能在局域网进行正常访问?3.你将Windows应用程序拷贝到B机中,将Sql Server 2000下的数据库还原到你的A机中的Sql Server 2005中,让B机应用程序来访问你的A机的数据库服务器,看是否可以?以上三点中,我怀疑是第二点出了点毛病,因为B机重装系统前你们可以进行正常连接.可能因为重装系统,改变了你们原先的一些设置.如A,B是否加入了同一个工作组中,B机的防火墙是否开放着,还有杀毒软件的影响等.
#karlen 发表于2007-10-08 18:06:04  IP: 60.190.142.*
谢谢热心解答~1。SQL SERVER2000应该是默认就允许远程连接的,因为以前都直接能连的。上面的方法是针对2005吧,2000中我没有找到是否允许远程连接的开关。2.B和局域网中所有机器的文件共享访问,打印服务等都正常的,包括AB之间的。3.方法3我先试试看吧~手头没有2005企业版,还得去下载一个才行。总之这个问题实在是头痛啊!
#赵灵儿 发表于2007-11-02 09:45:13  IP: 210.82.125.*
你好。我用C#应用程序连接数据库时,同样出现了你说的问题。C#应用程序端安装了SQL 2000和SQL 2005 。远程连接的数据库端也安装了 SQL 2000和 SQL 2005 两个数据库。我用应用程序连接 远程的 SQL 2000时出现上边你说的问题。SQL 2000 SQL 2005 各自有一个数据库引擎。请问:vs2005 中oledb 能否连接到同时安装了SQL 2000和 SQL 2005 数据库的系统上?
#zhangyang0402 发表于2007-11-03 00:46:44  IP: 117.76.195.*
你好.我上学期在自己机子上同时安装了SQL Server 2000 和2005,发现了一个问题:就是先安装哪个版本,哪个版本就会先占用默认实例.我重复安装了多次.先装2005,再装2000的时候,2000不能选择默认实例,只能命名新实例.这样2000不能正常使用,2005可以使用;先安装2000,再安装2005时2000能使用,2005不能使用.这样应用程序连接数据库的时候会出现问题.后来,我干脆只装一个,要不只装2000,要不只装2005.最好两个不要在同一台机子上同时装,同时装也没多大意义,你毕竟只使用一个数据库.建议你安装2005吧,毕竟它比2000强了很多,又能新版本,而且Visual Studio 2005+SQL Server 2005搭配得不错,我很喜欢使用这一组合.不知道这样回答能否解决你的问题.
#kongchuxing 发表于2008-04-14 20:13:55  IP: 59.34.5.*
调试能打开SQL Server 2005数据库,但在浏览器上运行时,连不上SQL Server 2005数据库,怎么办
2008-04-17 11:13:46作者回复
我在博客里发表的那篇文章是我用C#做Windows Form应用程序连接SQL Server 2005时写的,你的是Web应用程序吧.但不管什么应用程序,连接数据库的操作都应该是一样的(我现在也在学习asp.net),你说的"连不上SQL Server 2005数据库"是不是也出现了我在博客里出现的那种错误?如果是的话,你先按照我在文章里面说的一一检查对照一下,看你的连接字符串是不是有问题,数据库安装、设置是否有误等。
#xia_ay 发表于2008-05-10 00:19:17  IP: 60.10.9.*
你好,我用的是 VS里的SQL SERVER 2005在asp.net 2.0中注册 SQL SERVER 2005 时出现如下错误提示:安装失败。异常:无法连接到 SQL Server 数据库。----------------------------------------故障的详细信息----------------------------------------System.Web.HttpException: 无法连接到 SQL Server 数据库。 ---> System.Data.SqlClient.SqlException: 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)在 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)在 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)在 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)在 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String new
2008-05-10 20:47:39作者回复
你好.<br />你遇到的这个问题和我以前遇到的算是差不多,其中的因素有很多,我在文章中罗列了几个,你参照一下,还有前面的评论.我以前做的是Windows Form应用程序,你这个是ASP.net应用程序,大体思路是一样的.你再按我在文章中说的认真检查一下.