-Begin-
大家在学习数据库的时候,以上两个错误基本上是不可避免的,图1是使用SSMS登录时出现的错误,图2是通过C#代码连接数据库时出现的错误。
今天就这个错误,跟大家做一些具体的分析,希望大家可以彻底解决这个问题。
以上两个错误是完全一样的,是同一个问题导致的。
其实错误提示已经清晰地说明了原因:网络相关或特定于实例的错误。
网络相关的我们先不用管,先说“特定于实例的错误”,换句更加明白的话就是“数据库的实例名称有错误”。那数据的实例名是哪部分呢?很清楚上面数据库登录界面中,用红色方框标出来的部分就是。在C#程序中,用箭头标出的Server=后面的部分就是。那实例名到底对不对呢?
首先,我们打开计算机的系统信息,看看你当前用的计算机的名称是什么不就知道了?如下图:
经过仔细对比发现原来上面的实例写错了,在“DESKTOP-LNU3H65”后面多写了一个“0”,这个就是问题的原因。那我们就改过来,再测试一下,登录是OK的!如下图:
C#程序中也修改成正确的,如下:
运行也OK。
也就是你自己把自己电脑的名称复制过去就解决了。
那如果以上方法还不行,还是同样的错误!怎么办?
我们打开计算机的服务,找到数据库的服务,发现如下:
通过上面的查看,在我当前的计算机服务中有两个服务,第一个是“默认实例”,第二是“命名实例”,我们刚才直接用的计算机名称,表示连接的“默认实例”,但是现在这个默认实例的状态是禁用的,也就是服务没有运行,所以,还是登录不了。解决方法就是双击这个服务,弹出窗口,启动类型选择“自动”,点击右下角“应用”,然后在点击“启动”按钮即可。
修改完成后,再次运行肯定能够连接上。但是,如果你的计算机上,并不是默认实例,也没有默认实例,只有一个命名实例怎么办?比如我们连接命名实例如下:
这就要求登录数据库时,那个服务器名就要用“计算机名\\实例名”这样来写才行,参考如下图的修改:
点击连接,完全OK!
当然,前提条件是要保证这个服务同样也要正常运行才可以。特别注意的是看好你的数据库服务命名实例的具体名称,不要写错,如果写错,同样还是前面的错误。而且要注意这个“反斜杠\\”要写对。
C#程序中要按照如下要求去写:
也就是C#中要使用两个反斜杠来实现转义,使用一个会出错,这个是基础语法知识,大家应该是知道的。如果你不想用两个反斜杠,也可以这么解决,在字符串的前面使用@符号来实现转义,如下:
如果你的计算机,并不是本地连接服务器,而是连接局域网其他的计算机中的数据库服务,或者是远程云服务器的数据库,那连接字符串如果是默认实例就应该写“Server=IP地址”,如果是命名实例就写“Server=IP地址/实例名称”。IP地址必须是局域网正确的IP地址或者是远程服务器的外网IP地址。特别的,以上修改后,如果问题还是没有解决,请按照如下方法去做:
【1】检查网络连接是否正常,确保物理连接畅通(可以使用ping IP地址的方法)
【2】检查数据库服务所在的计算机,有没有防火墙,如果有,查看防火墙有没有拦截,如果拦截放行即可,或者直接关闭即可(如果允许)
【3】检查局域网或远程服务器的TCP/IP协议是否打开,这里要求必须打开,方法如下:
通过“开始菜单”的目录,找到SQLServer的安装菜单中的“配置管理器”,
然后点击,打开窗口:
双击“TCP/IP”,然后选择“是”,接着点击“确定”按钮:
最后,别忘记,重新启动SQLServer的服务。可以在配置管理器中直接找到服务双击,然后点击“重新启动”即可:
按照以上方法,即可解决所有网络连接和实例问题。
但是在C#程序中还有一种特殊情况,也会报同样的错误,C#程序错误提示如下:
其实这个并不是实例本身的错误,是因为写字符串的时候,把关键字之间的分号“;”,写成了逗号,这样在解析字符串的时候,它认为Server后面的全部都是实例名称,那这样相对来说肯定是错误的实例。
所以会出现同样的错误。解决方法就是当你看到实例没问题的时候,看看是不是把分号写错了。而且,注意任何标点符号,必须要用“英文半角”。
好了以上就是关于这个错误产生的各种原因和解决方法,已经给大家讲解完毕了,希望对大家有帮助。
-END-
全部0条评论
快来发表一下你的评论吧 !