ikaiser's c# coding life  
good good study,day day up~
以前程序是在本机编写测试,一直都是在用sql server数据库,因为网上空间不支持sql,所以只有把sql转换为Access,在转换的过程中,遇到了一些问题。
首 先是NHibernate默认没有对Access数据库访问的Dialect,所以只有从网上找些解决办法,通过搜索发现用的比较多的也就是 MsAccess2000Dialect和JetDialect,我选择了JetDialect(JetDialect是包含在 NHibernateContrib,朋友们可以到下面的链接页面去下载源码),具体的配置也很简单:
<factory id="sessionFactory1" >
 
<settings>
 
<item key="hibernate.connection.provider">NHibernate.Connection.DriverConnectionProvider</item>
 
<item key="hibernate.connection.driver_class">NHibernate.JetDriver.JetDriver, NHibernate.JetDriver</item>
 
<item key="hibernate.connection.connection_string">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=your database filepath</item>
 
<item key="hibernate.dialect">NHibernate.JetDriver.JetDialect, NHibernate.JetDriver</item>
 
</settings>
 
</factory>
</facility>

然后在项目中添加对NHibernate.JetDriver的引用,浏览页面很顺利的打开了没有出现什么问题。但是在我进行对数据库的更新时问题 又出现了——“标准表达式中数据类型不匹配”,在网上查了一下都是些int型字段加了单引号、string型字段没有加之类的,因此我怀疑是不是在 NHibernate.JetDriver引用中在数据转换的时候出现了问题?于是我把NHibernate.JetDriver项目加到了我的项目中, 并且把引用指向这里,一步步调试。
当我调试到JetDbCommand.cs类中CheckParameters方法时,看到如果字段属性是日期 时间字段,那么会自动转换成字符串,注意到这样一句话newVal = ( ( DateTime ) p.Value ).ToString( "dd-MMM-yyyy HH:mm:ss" ),怎么是“MMM”??时间类型的字段经过这个转化后变成了"04-四月-2006 10:35:56",这明显不是我想要的,修改一下然后重新编译运行,insert和update都通过了。
有时候小的细节很重要。 

 Download NHibernate 1.0: 
http://sourceforge.net/project/showfiles.php?group_id=73818&package_id=73969&release_id=362512 
 
Download NHibernateContrib 1.0: 
http://sourceforge.net/project/showfiles.php?group_id=73818&package_id=138561&release_id=362513

同步更新地址:http://www.uusite.com/
posted on 2006-07-04 20:25  ikaiser  阅读(2967)  评论(2)    收藏  举报