ActiveRecord 执行原生SQL语句及返回DataTable
2008-12-23 11:19
260 查看
在用ActiveRecord使用SQlite数据库时,发现它的翻页SlicedFindAll效率很低,没有使用SQLite的Limit参数,于是想到构造原生SQL。
在AR的官方网站上看到获取DBConnection的方法:
using Castle.ActiveRecord;
...
// Expects a root type
ISession sess = ActiveRecordMediator.GetSessionFactoryHolder().
CreateSession(typeof(ActiveRecordBase));
// Now you can use sess.DbConnection
ActiveRecordMediator.GetSessionFactoryHolder().ReleaseSession(sess);
项目中用到的namespace:
using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using Castle.ActiveRecord;
using Castle.ActiveRecord.Queries;
using NHibernate.Expression;
using Castle.ActiveRecord.Framework.Config;
using Castle.ActiveRecord.Framework;
using NHibernate;
得到DbConnection后,可以调用Command了,但是对于组件绑定的状况,一般需要返回DataTable。
于是使用一下DataReader填充DataTable的方法,主要思路是根据DataReader的SchemaTable构造DataTable。
public static DataTable GetTable(IDataReader _reader)
{
DataTable _table = _reader.GetSchemaTable();
DataTable _dt = new DataTable();
DataColumn _dc;
DataRow _row;
System.Collections.ArrayList _al = new System.Collections.ArrayList();
for (int i = 0; i < _table.Rows.Count; i ++)
{
_dc = new DataColumn();
if (! _dt.Columns.Contains(_table.Rows[i]["ColumnName"].ToString()))
{
_dc.ColumnName = _table.Rows[i]["ColumnName"].ToString();
_dc.Unique = Convert.ToBoolean(_table.Rows[i]["IsUnique"]);
_dc.AllowDBNull = Convert.ToBoolean(_table.Rows[i]["AllowDBNull"]);
_dc.ReadOnly = Convert.ToBoolean(_table.Rows[i]["IsReadOnly"]);
_al.Add(_dc.ColumnName);
_dt.Columns.Add(_dc);
}
}
while (_reader.Read())
{
_row = _dt.NewRow();
for ( int i = 0; i < _al.Count; i++)
{
_row[((System.String) _al[i])] = _reader[(System.String) _al[i]];
}
_dt.Rows.Add(_row);
}
return _dt;
}
在AR的官方网站上看到获取DBConnection的方法:
using Castle.ActiveRecord;
...
// Expects a root type
ISession sess = ActiveRecordMediator.GetSessionFactoryHolder().
CreateSession(typeof(ActiveRecordBase));
// Now you can use sess.DbConnection
ActiveRecordMediator.GetSessionFactoryHolder().ReleaseSession(sess);
项目中用到的namespace:
using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using Castle.ActiveRecord;
using Castle.ActiveRecord.Queries;
using NHibernate.Expression;
using Castle.ActiveRecord.Framework.Config;
using Castle.ActiveRecord.Framework;
using NHibernate;
得到DbConnection后,可以调用Command了,但是对于组件绑定的状况,一般需要返回DataTable。
于是使用一下DataReader填充DataTable的方法,主要思路是根据DataReader的SchemaTable构造DataTable。
public static DataTable GetTable(IDataReader _reader)
{
DataTable _table = _reader.GetSchemaTable();
DataTable _dt = new DataTable();
DataColumn _dc;
DataRow _row;
System.Collections.ArrayList _al = new System.Collections.ArrayList();
for (int i = 0; i < _table.Rows.Count; i ++)
{
_dc = new DataColumn();
if (! _dt.Columns.Contains(_table.Rows[i]["ColumnName"].ToString()))
{
_dc.ColumnName = _table.Rows[i]["ColumnName"].ToString();
_dc.Unique = Convert.ToBoolean(_table.Rows[i]["IsUnique"]);
_dc.AllowDBNull = Convert.ToBoolean(_table.Rows[i]["AllowDBNull"]);
_dc.ReadOnly = Convert.ToBoolean(_table.Rows[i]["IsReadOnly"]);
_al.Add(_dc.ColumnName);
_dt.Columns.Add(_dc);
}
}
while (_reader.Read())
{
_row = _dt.NewRow();
for ( int i = 0; i < _al.Count; i++)
{
_row[((System.String) _al[i])] = _reader[(System.String) _al[i]];
}
_dt.Rows.Add(_row);
}
return _dt;
}
相关文章推荐
- Entity Framework执行Sql语句返回DataTable
- AEF 中的SQL语句执行能否返回数据集(DataTable)?
- AEF 中的SQL语句执行能否返回数据集(DataTable)?
- Entity Framework(EF) 直接执行数据库命令并返回 DataTable 数据参数化 SQL 语句
- entity framework(EF) 直接执行数据库命令并返回DataTable 参数化sql语句
- Entity Framework执行Sql语句返回DataTable
- 表单中通过sql语句,一次操作,执行多个sql,返回多个值的方法
- 使用Hibernate 5.0、4.0、3.0 createSQLQuery执行原生Sql语句 遇到问题及解决办法集锦
- .Net core下直接执行SQL语句并生成DataTable的实现方法
- 执行SQL语句,返回新插入的主键值
- Spring配置Mybatis执行原生SQL语句
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题
- Hibernate 执行sql语句返回yntax error: syntax error, expect LPAREN, actual NOT not
- 执行SQL语句返回ID值
- weblogic hibernate关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题(www.50xiao.com)
- @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。
- Hibernate 执行SQL语句的count函数返回BigDecimal类型
- PDOstament对象执行execute()函数,只要是sql语句正确都是返回true
- Hibernate SQLQuery查询返回空List,在mysql命令下直接执行sql语句可以正常得到记录
- @@ERROR @@ROWCOUNT 返回的都是上一条SQL 语句后的执行信息。