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

错误:"在连接到 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 <script type="text/javascript">AddFeedbackCountStack("1598646")</script> )|编辑

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

<script type="text/javascript">document.write(" ");</script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shCore.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushCSharp.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushXml.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushCpp.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushCss.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushDelphi.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushJava.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushJScript.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushPhp.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushPython.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushRuby.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushSql.js" type="text/javascript"></script> <script language="javascript" src="http://hi.images.csdn.net/js/syntaxhighlighter/scripts/shBrushVb.js" type="text/javascript"></script> <script language="javascript" type="text/javascript"> //window.onload = function(){ dp.SyntaxHighlighter.ClipboardSwf = 'http://hi.images.csdn.net/flash/syntaxhighlighter/clipboard.swf'; dp.SyntaxHighlighter.HighlightAll('code'); //} </script> <script type="text/javascript">LoadFeedbackCount();</script> <script language="javascript" type="text/javascript"> ad_width=468; ad_height=60; adcss=2; unionuser=19; tags=''; ad_type='j'; count=2; </script> <script language="javascript" src="http://tagegg.csdn.net/showads.js" type="text/javascript"></script> <script language="JavaScript1.1" src="http://tagegg.csdn.net/a.aspx?action=displayad&unionuser=19&unionurl=http%3A%2F%2Fblog.csdn.net%2Fzhangyang0402%2Farchive%2F2007%2F05%2F07%2F1598646.aspx&adcss=2&ad_type=j&width=468&height=60&ad_color=&ad_color_border=&count=2" type="text/javascript"></script>
怎么才能AJAX技术入门?
学会AJAX几个核心技术点的理论和实践知识 学会AJAX应用的开发方式
Java 让开发自动化
创建一个运行测试的预订集成构建 预防和修复开发周期中出现的问题
<script language="javascript" src="http://blog.csdn.net/js/show_blog_tagad.js" type="text/javascript"></script> media="all" href="http://blog.csdn.net/css/tag_blog.css" type="text/css" rel="stylesheet" />

评论

# 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应用程序,大体思路是一样的.你再按我在文章中说的认真检查一下.
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页