在我们的实际框架中更多的地方需要得到SQL语句。复杂的SQL主要是查询.本文介绍了怎么让IBatisNet支持DataTable。
IBatisNet之获取和操作SQL语句
一文中的方法不支持最新版本的IBatisNet。根据IBatisNet新版本改为:
GetSql/GetDataTable#regionGetSql/GetDataTable
/**////<summary>
///得到参数化后的SQL
///</summary>
publicstaticstringGetSql(stringtag,objectparamObject)
{
IStatementstatement=Mapper.Instance().GetMappedStatement(tag).Statement;
IMappedStatementmapStatement=Mapper.Instance().GetMappedStatement(tag);
IDalSessionsession=newSqlMapSession(Mapper.Instance());
RequestScoperequest=statement.Sql.GetRequestScope(mapStatement,paramObject,session);
returnrequest.PreparedStatement.PreparedSql;
}
protectedstaticIDbCommandGetDbCommand(stringtag,objectparamObject)
{
IStatementstatement=Mapper.Instance().GetMappedStatement(tag).Statement;
IMappedStatementmapStatement=Mapper.Instance().GetMappedStatement(tag);
IDalSessionsession=newSqlMapSession(Mapper.Instance());
RequestScoperequest=statement.Sql.GetRequestScope(mapStatement,paramObject,session);
mapStatement.PreparedCommand.Create(request,session,statement,paramObject);
returnrequest.IDbCommand;
}
/**////<summary>
///通用的以DataTable的方式得到Select的结果(xml文件中参数要使用$标记的占位参数)
///</summary>
///<paramname="tag">语句ID</param>
///<paramname="paramObject">语句所需要的参数</param>
///<returns>得到的DataTable</returns>
publicstaticDataTableGetDataTable(stringtag,objectparamObject)
{
DataSetds=newDataSet();
boolisSessionLocal=false;
IDalSessionsession=Mapper.Instance().LocalSession;
if(session==null)
{
session=newSqlMapSession(Mapper.Instance());
session.OpenConnection();
isSessionLocal=true;
}
try
{
IDbCommandcmd=GetDbCommand(tag,paramObject);
cmd.Connection=session.Connection;
IDbDataAdapteradapter=session.CreateDataAdapter(cmd);
adapter.Fill(ds);
}
finally
{
if(isSessionLocal)
{
session.CloseConnection();
}
}
returnds.Tables[0];
}
/**////<summary>
///用于分页控件使用
///</summary>
///<paramname="tag">语句ID</param>
///<paramname="paramObject">语句所需要的参数</param>
///<paramname="PageSize">每页显示数目</param>
///<paramname="curPage">当前页</param>
///<paramname="recCount">记录总数</param>
///<returns>得到的DataTable</returns>
publicstaticDataTableGetDataTable(stringtag,objectparamObject,intPageSize,intcurPage,outintrecCount)
{
IDataReaderdr=null;
boolisSessionLocal=false;
stringsql=GetSql(tag,paramObject);
stringstrCount="selectcount(*)"+sql.Substring(sql.ToLower().IndexOf("from"));
IDalSessionsession=Mapper.Instance().LocalSession;
DataTabledt=newDataTable();
if(session==null)
{
session=newSqlMapSession(Mapper.Instance());
session.OpenConnection();
isSessionLocal=true;
}
try
{
IDbCommandcmdCount=GetDbCommand(tag,paramObject);
cmdCount.Connection=session.Connection;
cmdCount.CommandText=strCount;
objectcount=cmdCount.ExecuteScalar();
recCount=Convert.ToInt32(count);
IDbCommandcmd=GetDbCommand(tag,paramObject);
cmd.Connection=session.Connection;
dr=cmd.ExecuteReader();
dt=Paging(dr,PageSize,curPage);
}
finally
{
if(isSessionLocal)
{
session.CloseConnection();
}
}
returndt;
}
/**////<summary>
///取回合适数量的数据
///</summary>
///<paramname="dataReader"></param>
///<paramname="PageSize"></param>
///<paramname="curPage"></param>
///<returns></returns>
protectedstaticDataTablePaging(IDataReaderdataReader,intPageSize,intcurPage)
{
DataTabledt;
dt=newDataTable();
intcolCount=dataReader.FieldCount;
for(inti=0;i<colCount;i++)
{
dt.Columns.Add(newDataColumn(dataReader.GetName(i),dataReader.GetFieldType(i)));
}
//读取数据。将DataReader中的数据读取到DataTable中
object[]vald=newobject[colCount];
intiCount=0;//临时记录变量
while(dataReader.Read())
{
//当前记录在当前页记录范围内
if(iCount>=PageSize*(curPage-1)&&iCount<PageSize*curPage)
{
for(inti=0;i<colCount;i++)
vald[i]=dataReader.GetValue(i);
dt.Rows.Add(vald);
}
elseif(iCount>PageSize*curPage)
{
break;
}
iCount++;//临时记录变量递增
}
if(!dataReader.IsClosed)
{
dataReader.Close();
dataReader.Dispose();
}
returndt;
}
#endregion
分享到:
相关推荐
ibatisnet.common.dll Ibatis.DataMapper.dll MySql.Data.dll.rar别人要太贵,我就要5个
IBatisNet.DataMapper 1.6.1.0之简单三层 首先介绍Solution的架构,一共分四个项目: Web :前台应用; BLL :业务处理层,如果嫌麻烦,可以再进一步抽象出来,然后将代码放置Web层的aspx.cs里面; Model :这个就...
IBatisNet.DataMapper之简单三层_aspx开发教程
IbatisNet的介绍和使用 - 电子商务创业的日志 - 网易博客,IbatisNet的介绍和使用 - 电子商务创业的日志 - 网易博客IbatisNet的介绍和使用 - 电子商务创业的日志 - 网易博客
包含一个正则表达式工具 winform C# IBatisNet 调用存储过程 m mysql
项目中使用到IBatisNet,感觉灵活好用,发出来分享 包含: IBatis.DataAccess.1.9.2.bin IBatis.DataMapper.1.6.2.bin Doc-DataAccess-1.9.2 Doc-DataMapper-1.6.2
iBATIS.NET - DataMapper Application Framework
IBatisNet.DataMapper 1.6.1.0 之简单三层_ibatisnetdemo
IBatisNet-执行存储过程详细实例 IBatisNet-执行存储过程详细实例 IBatisNet-执行存储过程详细实例 IBatisNet-执行存储过程详细实例 IBatisNet-执行存储过程详细实例
目前最新的版本为Castle.DynamicProxy 3.0,支持.NET 4,但是与原来的代码不兼容了(代码树基本上全 部调整了),而iBatis目前最新版本是基于旧版的Castle.DynamicProxy 1.5,如果升级到3.0代码修改量 和测试工作量...
ASP.NET源码——IBatisNet.DataMapper 1.6.1.0 之简单三层.zip
IBatisNet和NHibernate模版
IBatisNet.DataMapper 1.6.1.0之简单三层.zip
IBatisNet.Common.1.6.2、IBatis.DataAccess.1.9.2、IBatis.DataMapper.1.6.2
ASP.NET-[其他类别]IBatisNet.DataMapper1.6.1.0之简单三层.zip
Ibatisnet介绍和使用
ibatisnet教程 1-6篇(全)欢迎大家学习
C# winform ibatisnet datagridview数据库分页。 使用前先在数据库中创建sys_user表。字段看配置文件。
这个框架将让你能够更好的在dotnet应用中设计和实现实体层。这个框架有两个主要的组成部分,一个是SQL Maps,另一个是Data Access Objects。下面是一个简单的iBATISNet应用架构。 项目中总共10个项目 External_...