如何在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也赶快加上这个特性。
在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也赶快加上这个特性。
相关文章推荐
- 如何判断存储过程中,T-SQL语句是否执行?
- 如何使用SQL语句 查看存储过程的内容
- Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
- 如何调用存储过程,有返回值的,有参数的,存储过程中调用存储过程。(MS SQL Server)
- 如何用SQL语句在两个数据库间复制存储过程
- (转载)delphi 中如何调用sql 存储过程
- 【数据库】如何调试sql语句、存储过程——PLSQL、VS
- [转][SQL]如何实现存储过程中动态加入条件---没想到语句可以这么巧妙
- 直接从SQL语句问题贴子数据建表并生成建表语句的存储过程
- Oracle 动态SQL语句(4)之存储过程的调用与浅谈字符串的使用
- C# asp.net SQL存储过程写法Insert 插入语句,及其在asp.net中的调用方法
- oracle存储过程中如何执行动态SQL语句
- [Database]创建存储过程并在ASP.NET中的调用带参数的存储过程与及调用带参数的SQL语句对比
- 如何调用存储过程,有返回值的,有参数的,存储过程中调用存储过程。(MS SQL Server)
- pl/sql developer中用execute调用存储过程弹出‘无效的sql语句’…该怎么解决
- SQLSERVER 存储过程里如何执行SQL语句
- 存储过程与SQL语句如何选择
- 存储过程和SQL语句比较及存储过程在C#中调用方法(转)
- 求救!胜负比率计算问题?如何用SQL语句实现?(存储过程也可以)
- 存储过程和SQL语句比较及存储过程在C#中调用方法