大家好,初学者遇到数据库连接不上,是很常见的情况,可能会以各种形式呈现出来,今天跟大家分享一下,如何解决C#连接不上数据库的问题。
本文主要针对的是SQLServer数据库,采用sa账户登录,配置文件采用appconfig,本地数据库的情况,如果情形不一样,可能无法涵盖。
以下这几种情况,都可能是连接字符串导致的问题,可能还会有其他情况,后续再完善补充。
(1)代码报错,提示sa登录失败。
(2)提示连接出错,未找到或无法访问服务器。
(3)代码报错,提示类型初始值设定项引发异常。
(4)直接弹窗,提示类型初始值设定项引发异常。
(5)代码报错,不支持关键字。
(6)代码报错,提示未将对象引用到对象的实例
(7)代码报错,提示初始值设定引发异常项
第一步:首先一定要保证SMMS可以连接上数据库,这是一个大的前提,如果SSMS都不能连接数据库,就先解决这个问题之后,再往后面看。
第二步:如果SSMS可以连接数据库,那么我们观察一下这个登录界面分析一下,SQLServer连接字符串主要由四个部分组成,分别是服务器名称Server、数据库名称DataBase、用户ID即Uid、密码即Pwd,除了数据库名称之外,其他三个参数都应该与这上面的保持一致,否则就会出错。
第三步:简而言之,就是把SSMS这个登录界面的参数数据复制到连接字符串里,进行替换即可。
第四步:复制完成之后,如果采用的是字符串方式,对于命名实例是可能会出现语法错误的,这个是因为转义的问题,解决方案有两种,第一种方式是在连接字符串前面加个@进行转义,第二种方式是将连接字符串中的单斜杠改成双斜杠。
private string ConnStr=@"Server=DESKTOP-ICFINTH\Wincc;DataBase=ProductDB;Uid=sa;Pwd=123";
private string ConnStr = "Server=DESKTOP-ICFINTH\\Wincc;DataBase=ProductDB;Uid=sa;Pwd=123";
如果问题仍然没有解决,按照下面的步骤进行检查:
(1) 检查数据库名称是否正确
(2) 检查connectString的名称有没有错误
(3) 检查下面这行代码有没有错误
(4) 对照检查SQLHelper里的代码有没有错误
以下几个概念问题,需要大家注意:
(1)怎么判断是命名实例还是默认实例?
如图,服务器名称为DESKTOP-5DI6FNQ,这种就是默认实例。
当名称中带有 ’ \ ’ 时,例如DESKTOP-5DI6FNQ\WINCC,这种就是命名实例,其中WINCC就是实例名称,默认实例和命名实例可以共存,也可以有多个实例名称。
(2)使用appconfig和不用appconfig有什么区别?
使用appconfig方式是通过xml配置文件来获取连接字符串。配置文件可以通过记事本等其他软件打开并修改。这样就可以使用不更改代码的方式改变数据库的连接字符串。不使用appconfig,只能在代码中定义固定的连接字符串。
有一点要注意,对于命名实例,如果直接用字符串的方式,是需要双斜杠或@转义,如果是appconfig的方式,则是单斜杠,不能写成双斜杠。
本文只是从常见的错误角度来说明了解决方案和排查步骤,实际情况错综复杂,只有掌握好方法和思路,才能尽快解决问题。
-END-