您的位置:首页 > 数据库

如何在Nhiberante中直接调用sql语句和存储过程

2005-11-18 23:15 691 查看
其实在这里讨论这些问题有点违背Hibernate的本意了,如果大家项目中对调用Sql语句和存储比较需要的话,那么建议在项目规划阶段不要采用该框架。

在Nhibernate中要直接执行sql语句很容易的,Nhiernate中提供了CreateSQLQuery方法允许这么做,关于执行原生语句随便找个hibernate手册里面讲得很清楚的,这里就举个简单的例子。

采用Hql的代码如下:

string hql = "from Article a where a.Section.Id = :sectionId and a.DateOnline < :now and a.DateOffline > :now ";
IQuery q = base.NHSession.CreateQuery(hql);

q.SetInt32("sectionId", base.Section.Id);
q.SetDateTime("now", DateTime.Now);
q.SetMaxResults(number);
return q.List();

那么采用原生sql的代码如下:

string hql = "select {a.*} from cm_Article {a} where a.sectionId = :sectionId and a.DateOnline < :now and a.DateOffline > :now ";
Iquery q =base.NHSession.CreateSQLQuery(hql,"a",typeof(Cuyahoga.Modules.Articles.Article));
q.SetInt32("sectionId", base.Section.Id);
q.SetDateTime("now", DateTime.Now);
q.SetMaxResults(number);
return q.List();

注意:在使用原生sql是,在查询语句中必须声明别名。

关于在Nhibernate中使用存储过程,我做了个实验,好像用CreateSQLQuery方法不行,只能采用间接方法曲线救国了,需要使用存储过程的数据库处理中,直接引用session的Connection对象,然后向平时调用存储过程一样就行了。大致如下:

System.Data.SqlClient.SqlConnection conn = base.NHSession.Connection as System.Data.SqlClient.SqlConnection;

调用存储过程处理

conn.close();
听说Hibernate3.0支持存储过程,希望Nhibernate也赶快加上这个特性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐