由于项目的需要(主要是测试需要),需要对Access数据库进行操作,在DAL我采用了NHibernate,由于NHB以前只是在Java上运用了些皮毛,因此遇到的问题自然也不少,记录下来,以备后忘:
1)连接Access:NHB没有专门的Access方言,网上搜罗也是众说纷纭,大概是很少将Nhb用在Access上的缘故吧,只能自己尝试了。
我的成功配置文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="masparameter">
<property name="dialect">NHibernate.Dialect.SybaseDialect</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.OleDbDriver</property>
<property name="connection.connection_string">Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=F:\ags92prj\wma3\masparameter.mdb;</property>
<property name="connection.isolation">ReadCommitted</property>
<!-- HBM Mapping Files -->
<mapping assembly="wmadata" />
</session-factory>
</hibernate-configuration>
其中 <property name="dialect">NHibernate.Dialect.SybaseDialect</property> 我使用了Sybase的方言,Hibernate没有专门针对Access的方言,只能用一个近似的代替。
开始我使用了MSSql7的方言,但是经过测试:在Insert的语句时,NHB抛出异常,原因是Access不支持同时执行两个SQL语句(MSServer则支持)。
其次我又换了Oracle作为替代方言,经测,Last_。。。的错误(具体忘了),记录是被增加至数据库了,但是总是抛出其他异常。
最后尝试了Sybase的方言,OK,在增删改查的操作下没有出现异常。
对于NHibernate,我也是初学,以上文字希望对大家能有所帮助并多多指教。