Nhibernate操作原生SQL以及查询DataTable
2011-04-28 11:36
471 查看
使用Nhibernate时我们很方便实现实体映射,但是如果遇到复杂查询则显得力不从心,这是我们可以利用Nhibernate来操作原生sql来查询到DataTable来实现我们复杂的查询及其它操作。以下实例已经过调试,现与大家分享。
/// <summary>
/// 执行ExecuteNonQuery
/// </summary>
/// <param name="sql"></param>
public void ExecuteNonQuery(string sql)
{
ISession session = null;
ITransaction transaction = null;
try
{
session = NHibernateHelper.GetCurrentSession();
transaction = session.BeginTransaction();
IDbCommand command = session.Connection.CreateCommand();
transaction.Enlist(command);//注意此处要把command添加到事物中
command.CommandText = sql;
command.ExecuteNonQuery();
transaction.Commit();
}
catch (Exception ex)
{
if (transaction != null)
{
transaction.Rollback();
}
throw ex;
}
finally
{
if (session != null)
{
session.Close();
}
}
}
/// <summary>
/// 填充DataSet
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static DataSet ExecuteDataset(string sql)
{
ISession session = null;
DataSet ds = new DataSet();
try
{
session = NHibernateHelper.GetCurrentSession();
IDbCommand command = session.Connection.CreateCommand();
command.CommandText = sql;
IDataReader reader = command.ExecuteReader();
DataTable result = new DataTable();
//result.Load(reader);//此方法亦可
DataTable schemaTable = reader.GetSchemaTable();
for (int i = 0; i < schemaTable.Rows.Count; i++)
{
string columnName = schemaTable.Rows[i][0].ToString();
result.Columns.Add(columnName);
}
while (reader.Read())
{
int fieldCount = reader.FieldCount;
object[] values = new Object[fieldCount];
for (int i = 0; i < fieldCount; i++)
{
values[i] = reader.GetValue(i);
}
result.Rows.Add(values);
}
ds.Tables.Add(result);
}
catch (Exception ex)
{
Debug.Assert(false);
}
finally
{
if (session != null)
{
session.Close();
}
}
return ds;
}
/// <summary>
/// 填充DataSet(此方法亦可)
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public DataSet ExecuteDataset(string sql)
{
ISession session = null;
DataSet ds = new DataSet();
try
{
session = NHibernateHelper.GetCurrentSession();
IDbCommand command = session.Connection.CreateCommand();
command.CommandText = sql;
SqlDataAdapter da = new SqlDataAdapter(cmd as SqlCommand);
da.Fill(ds);
}
catch (Exception ex)
{
Debug.Assert(false);
}
finally
{
if (session != null)
{
session.Close();
}
}
return ds;
}
/// <summary>
/// 执行ExecuteNonQuery
/// </summary>
/// <param name="sql"></param>
public void ExecuteNonQuery(string sql)
{
ISession session = null;
ITransaction transaction = null;
try
{
session = NHibernateHelper.GetCurrentSession();
transaction = session.BeginTransaction();
IDbCommand command = session.Connection.CreateCommand();
transaction.Enlist(command);//注意此处要把command添加到事物中
command.CommandText = sql;
command.ExecuteNonQuery();
transaction.Commit();
}
catch (Exception ex)
{
if (transaction != null)
{
transaction.Rollback();
}
throw ex;
}
finally
{
if (session != null)
{
session.Close();
}
}
}
/// <summary>
/// 填充DataSet
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static DataSet ExecuteDataset(string sql)
{
ISession session = null;
DataSet ds = new DataSet();
try
{
session = NHibernateHelper.GetCurrentSession();
IDbCommand command = session.Connection.CreateCommand();
command.CommandText = sql;
IDataReader reader = command.ExecuteReader();
DataTable result = new DataTable();
//result.Load(reader);//此方法亦可
DataTable schemaTable = reader.GetSchemaTable();
for (int i = 0; i < schemaTable.Rows.Count; i++)
{
string columnName = schemaTable.Rows[i][0].ToString();
result.Columns.Add(columnName);
}
while (reader.Read())
{
int fieldCount = reader.FieldCount;
object[] values = new Object[fieldCount];
for (int i = 0; i < fieldCount; i++)
{
values[i] = reader.GetValue(i);
}
result.Rows.Add(values);
}
ds.Tables.Add(result);
}
catch (Exception ex)
{
Debug.Assert(false);
}
finally
{
if (session != null)
{
session.Close();
}
}
return ds;
}
/// <summary>
/// 填充DataSet(此方法亦可)
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public DataSet ExecuteDataset(string sql)
{
ISession session = null;
DataSet ds = new DataSet();
try
{
session = NHibernateHelper.GetCurrentSession();
IDbCommand command = session.Connection.CreateCommand();
command.CommandText = sql;
SqlDataAdapter da = new SqlDataAdapter(cmd as SqlCommand);
da.Fill(ds);
}
catch (Exception ex)
{
Debug.Assert(false);
}
finally
{
if (session != null)
{
session.Close();
}
}
return ds;
}
相关文章推荐
- Nhibernate操作原生SQL以及查询DataTable
- Nhibernate操作原生SQL以及查询DataTable
- NHibernate 操作原生SQL以及查询DataTable,DataSet
- hibernate使用原生sql查询Hibernate原生SQL多表查询字段名重复问题以及解决方法
- spring boot使用原生sql分页查询以及两张表的内连接查询sql
- Hibernate中使用原生的sql语句进行查询操作
- MyBatis学习之SQL查询参数以及增删改操作
- 10 CI where数据库操作 以及查询最后一次执行的sql语句
- Thinkphp原生的sql查询及执行操作
- Linq查询在LinqToSql以及DataTable中的使用
- hibernate HQL查询以及原生SQL查询参数类型的区别
- 如何在ThinkPHP里面使用原生的SQL查询操作
- NHibernate原生SQL查询
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- Hibernate 使用原生SQL进行查询
- CI中写原生SQL(封装查询)
- HQL中的原生SQL查询
- HibernateTemplate 查询原生sql及ljava.lang.object cannot be cast to
- ThinkPHP实现对数据库中表的修改删除以及两种原生SQL语句的执行
- JPA的查询语言—使用原生SQL