NHibernate连接字符串格式错误引发初始化异常,求解决方案
嘿,我刚帮几个NHibernate新手解决过一模一样的连接字符串格式问题,咱们一步步来揪出问题所在:
1. 先确认代码里的连接字符串赋值是否真的正确
你说写法和教程一致,但大概率是这里藏了小疏漏:
- 是不是不小心给
x.ConnectionString赋值了带配置键名的字符串?比如错写成了x.ConnectionString("hibernate.connection.connection_string=Server=.;Database=MyDB;"),而不是直接写纯连接字符串"Server=.;Database=MyDB;Trusted_Connection=True;"? - 有没有不小心加了多余的引号、空格或者分号?比如字符串前后多了空格,或者结尾少了分号?
2. 排查连接字符串本身的格式问题
不同数据库的连接字符串格式差异很大,你可以对照自己用的数据库检查:
- 如果是SQL Server:确保包含
Server、Database核心参数,Windows认证用Trusted_Connection=True,SQL认证要加User ID和Password,比如:Server=.;Database=YourStudentDB;Trusted_Connection=True;TrustServerCertificate=True; - 如果是MySQL:格式是
Server=localhost;Database=YourDB;Uid=root;Pwd=yourPassword;,别和SQL Server搞混了。 - 要是密码里有特殊字符(比如
@、;),记得用双引号把整个连接字符串括起来。
3. 用XML配置文件快速排查代码配置的问题
虽然教程没用到hibernate.cfg.xml,但咱们可以临时用它来定位问题:
- 新建
hibernate.cfg.xml文件,右键设置属性为复制到输出目录:如果较新则复制 - 填入以下模板(根据你的数据库调整):
<?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property> <!-- 对应你的数据库版本 --> <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> <property name="connection.connection_string">Server=.;Database=YourDBName;Trusted_Connection=True;TrustServerCertificate=True;</property> <property name="show_sql">true</property> </session-factory> </hibernate-configuration> - 把代码里的配置改成加载这个文件:
如果这样能正常运行,说明你之前的代码配置里的ConnectionString赋值逻辑有问题,比如属性名写错(比如用了var cfg = new Configuration().Configure(); // 默认加载hibernate.cfg.xml var sefact = cfg.BuildSessionFactory();x.ConnectionStringName而不是x.ConnectionString)。
4. 最后,贴出你的配置代码片段!
如果上面的步骤还没解决,把你配置数据库连接的那段代码贴出来,比如类似这样的:
var cfg = new Configuration(); cfg.DataBaseIntegration(x => { x.Driver<SqlClientDriver>(); x.Dialect<MsSql2012Dialect>(); x.ConnectionString = "你的连接字符串"; // 重点检查这一行 });
大概率是这里的小细节写错了。
内容的提问来源于stack exchange,提问作者MediocreThingy
相关产品推荐
相关产品推荐

