使用微软企业库,非分页sql语句得到分页数据方法
2007-07-20 11:46
337 查看
最近使用微软企业库,在做分页绑定的时候发现好象还没有多少通用的方法.为了灵活和换数据库,我不能使用存储过程.为了开发速度最快.我就是用datagrid绑定了.
以前长用的 DataAdapter.Fill(ds, StartRecordNo, PageSize, TableName); 这样获取某一页的数据.但是用微软企业库总么获得这样的数据按 .网上介绍 Database 类的 GetDataAdapter() 函数的文章太少了. 不过最终做成通用分页函数了.
用一条sql语句 select * from AAA 这样的语句,不是分页sql语句.得到总数目,总页数
现在定义的数据访问接口
public interface ISysMangerProvider
{
//执行sql语句获得DataSet数据
DataSet GetDataSetBySqlcomm(string Sqlcomm);
//执行sql语句获得DataSet数据 ,提供分页
DataSet GetDataSetBySqlcomm(int StartRecordNo, int PageSize, string Sqlcomm,string TableName);
//执行sql语句返回影响的行数目
int ExecSqlcomm(string Sqlcomm);
}
我门在微软企业库外面在包一层,放一些可以通用的函数 ,也可以简化数据提供者类的构造,和减少代码膨胀
#region 数据提供者,通用基础类
/// <summary>
/// 数据提供者,通用基础类
/// </summary>
public abstract class DataProviderBaseClass
{
#region 定义变量
protected Database db;
//protected object ReturnObjectValue;
#endregion
#region 构造函数
protected DataProviderBaseClass()
{
}
protected DataProviderBaseClass(int i): this()
{
db = DatabaseFactory.CreateDatabase();
}
protected DataProviderBaseClass(string connectionName): this()
{
db = DatabaseFactory.CreateDatabase(connectionName);
}
protected DataProviderBaseClass(SelectDataBae SDB):this()
{
db = DatabaseFactory.CreateDatabase(PublicNews.ChangeDataBase(SDB));
}
#endregion
#region 执行sql语句得到DataSet类型数据
/// <summary>
/// 执行sql语句得到DataSet类型数据
/// </summary>
/// <param name="Sqlcomm"></param>
/// <returns></returns>
protected DataSet ExecuteDataSetBySqlcomm(string Sqlcomm)
{
DataSet ds;
using (DbConnection dbConnection = this.db.CreateConnection())
{
ds = this.db.ExecuteDataSet(CommandType.Text, Sqlcomm);
dbConnection.Close();
}
return ds;
}
#endregion
#region 执行sql语句获得DataSet数据 ,提供分页
/// <summary>
/// 执行sql语句获得DataSet数据 ,提供分页
/// </summary>
/// <param name="PageNo">当前行数</param>
/// <param name="PageSize">一页分页数量</param>
/// <param name="Sqlcomm">sql语句</param>
/// <returns>DataSet对象</returns>
protected DataSet ExecuteDataSetBySqlcomm(int StartRecordNo, int PageSize, string Sqlcomm, string TableName)
{
DataSet ds = new DataSet();
using (DbConnection dbConnection = this.db.CreateConnection())
{
DbCommand dbCommand = this.db.GetSqlStringCommand(Sqlcomm + " ; select @@Rowcount ; ");
DbDataAdapter dbDataAdapter = this.db.GetDataAdapter();
dbCommand.Connection = dbConnection;
dbDataAdapter.SelectCommand = dbCommand;
dbConnection.Open();
dbDataAdapter.Fill(ds, StartRecordNo, PageSize, TableName);
dbConnection.Close();
}
return ds;
}
#endregion
#region 执行sql语句返回影响的行数目
/// <summary>
/// 执行sql语句返回影响的行数目
/// </summary>
/// <param name="stringcomm"></param>
/// <returns></returns>
protected int ExecIntBySqlcomm(string Sqlcomm)
{
using (DbConnection dbConnection = this.db.CreateConnection())
{
dbConnection.Open();
int i = this.db.ExecuteNonQuery(CommandType.Text, Sqlcomm);
dbConnection.Close();
return i;
}
}
#endregion
#region 检测DataSet对象是否有数据
/// <summary>
/// 检测DataSet对象是否有数据
/// </summary>
/// <param name="Ds">要检测的对象</param>
/// <returns>返回结果</returns>
public static bool CheckDataSet(DataSet Ds)
{
try
{
if (Ds != null && Ds.Tables.Count > 0 && Ds.Tables[0].Rows.Count > 0)
{
return true;
}
else
{
return false;
}
}
catch
{
throw;
}
}
#endregion
#region 检测DataSet对象是否有数据,分页支持
/// <summary>
/// 检测DataSet对象是否有数据,分页支持
/// </summary>
/// <param name="Ds">要检测的对象</param>
/// <returns>返回结果</returns>
public static bool CheckDataSetForPage(DataSet Ds, ref int ResultCount)
{
try
{
if (Ds != null && Ds.Tables.Count > 0 && Ds.Tables.Count == 2 && Ds.Tables[0].Rows.Count > 0)
{
ResultCount = Convert.ToInt32(Ds.Tables[1].Rows[0][0]);
if (ResultCount == 0)
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
catch
{
throw;
}
}
#endregion
}
#endregion
好了 最后数据提供者类就很简单了.
public class SysMangerProvider : DataProviderBaseClass ,ISysMangerProvider
{
#region 构造函数
public SysMangerProvider():base(1)
{
}
public SysMangerProvider(string connectionName):base(connectionName)
{
}
public SysMangerProvider(SelectDataBae SDB): base(SDB)
{
}
#endregion
#region 执行sql语句得到DataSet类型数据
/// <summary>
/// 执行sql语句得到DataSet类型数据
/// </summary>
/// <param name="Sqlcomm"></param>
/// <returns></returns>
public DataSet GetDataSetBySqlcomm(string Sqlcomm)
{
return base.ExecuteDataSetBySqlcomm(Sqlcomm);
}
#endregion
#region 执行sql语句获得DataSet数据 ,提供分页
/// <summary>
/// 执行sql语句获得DataSet数据 ,提供分页
/// </summary>
/// <param name="PageNo">当前行数</param>
/// <param name="PageSize">一页分页数量</param>
/// <param name="Sqlcomm">sql语句</param>
/// <returns>DataSet对象</returns>
public DataSet GetDataSetBySqlcomm(int StartRecordNo, int PageSize, string Sqlcomm,string TableName)
{
return base.ExecuteDataSetBySqlcomm(StartRecordNo, PageSize, Sqlcomm, TableName);
}
#endregion
#region 执行sql语句返回影响的行数目
/// <summary>
/// 执行sql语句返回影响的行数目
/// </summary>
/// <param name="stringcomm"></param>
/// <returns></returns>
public int ExecSqlcomm(string Sqlcomm)
{
return base.ExecIntBySqlcomm(Sqlcomm);
}
#endregion
}
在前台绑定的时候就非常简单了
int ResultCount = 0;
this.ds = this.SM.GetDataSetBySqlcomm(startIndex, this.DataGrid1.PageSize, " select * from PageInfo " ,"ShowList" );
if (DataProviderBaseClass.CheckDataSetForPage(this.ds, ref ResultCount))
{
this.DataGrid1.VirtualItemCount = ResultCount;
this.DataGrid1.DataSource = this.ds.Tables[0];
this.DataGrid1.DataBind();
}
else
{
this.Response.Write("对不起,没有获取到数据。");
}
好了 解决用微软企业库的sql语句分页问题.
以前长用的 DataAdapter.Fill(ds, StartRecordNo, PageSize, TableName); 这样获取某一页的数据.但是用微软企业库总么获得这样的数据按 .网上介绍 Database 类的 GetDataAdapter() 函数的文章太少了. 不过最终做成通用分页函数了.
用一条sql语句 select * from AAA 这样的语句,不是分页sql语句.得到总数目,总页数
现在定义的数据访问接口
public interface ISysMangerProvider
{
//执行sql语句获得DataSet数据
DataSet GetDataSetBySqlcomm(string Sqlcomm);
//执行sql语句获得DataSet数据 ,提供分页
DataSet GetDataSetBySqlcomm(int StartRecordNo, int PageSize, string Sqlcomm,string TableName);
//执行sql语句返回影响的行数目
int ExecSqlcomm(string Sqlcomm);
}
我门在微软企业库外面在包一层,放一些可以通用的函数 ,也可以简化数据提供者类的构造,和减少代码膨胀
#region 数据提供者,通用基础类
/// <summary>
/// 数据提供者,通用基础类
/// </summary>
public abstract class DataProviderBaseClass
{
#region 定义变量
protected Database db;
//protected object ReturnObjectValue;
#endregion
#region 构造函数
protected DataProviderBaseClass()
{
}
protected DataProviderBaseClass(int i): this()
{
db = DatabaseFactory.CreateDatabase();
}
protected DataProviderBaseClass(string connectionName): this()
{
db = DatabaseFactory.CreateDatabase(connectionName);
}
protected DataProviderBaseClass(SelectDataBae SDB):this()
{
db = DatabaseFactory.CreateDatabase(PublicNews.ChangeDataBase(SDB));
}
#endregion
#region 执行sql语句得到DataSet类型数据
/// <summary>
/// 执行sql语句得到DataSet类型数据
/// </summary>
/// <param name="Sqlcomm"></param>
/// <returns></returns>
protected DataSet ExecuteDataSetBySqlcomm(string Sqlcomm)
{
DataSet ds;
using (DbConnection dbConnection = this.db.CreateConnection())
{
ds = this.db.ExecuteDataSet(CommandType.Text, Sqlcomm);
dbConnection.Close();
}
return ds;
}
#endregion
#region 执行sql语句获得DataSet数据 ,提供分页
/// <summary>
/// 执行sql语句获得DataSet数据 ,提供分页
/// </summary>
/// <param name="PageNo">当前行数</param>
/// <param name="PageSize">一页分页数量</param>
/// <param name="Sqlcomm">sql语句</param>
/// <returns>DataSet对象</returns>
protected DataSet ExecuteDataSetBySqlcomm(int StartRecordNo, int PageSize, string Sqlcomm, string TableName)
{
DataSet ds = new DataSet();
using (DbConnection dbConnection = this.db.CreateConnection())
{
DbCommand dbCommand = this.db.GetSqlStringCommand(Sqlcomm + " ; select @@Rowcount ; ");
DbDataAdapter dbDataAdapter = this.db.GetDataAdapter();
dbCommand.Connection = dbConnection;
dbDataAdapter.SelectCommand = dbCommand;
dbConnection.Open();
dbDataAdapter.Fill(ds, StartRecordNo, PageSize, TableName);
dbConnection.Close();
}
return ds;
}
#endregion
#region 执行sql语句返回影响的行数目
/// <summary>
/// 执行sql语句返回影响的行数目
/// </summary>
/// <param name="stringcomm"></param>
/// <returns></returns>
protected int ExecIntBySqlcomm(string Sqlcomm)
{
using (DbConnection dbConnection = this.db.CreateConnection())
{
dbConnection.Open();
int i = this.db.ExecuteNonQuery(CommandType.Text, Sqlcomm);
dbConnection.Close();
return i;
}
}
#endregion
#region 检测DataSet对象是否有数据
/// <summary>
/// 检测DataSet对象是否有数据
/// </summary>
/// <param name="Ds">要检测的对象</param>
/// <returns>返回结果</returns>
public static bool CheckDataSet(DataSet Ds)
{
try
{
if (Ds != null && Ds.Tables.Count > 0 && Ds.Tables[0].Rows.Count > 0)
{
return true;
}
else
{
return false;
}
}
catch
{
throw;
}
}
#endregion
#region 检测DataSet对象是否有数据,分页支持
/// <summary>
/// 检测DataSet对象是否有数据,分页支持
/// </summary>
/// <param name="Ds">要检测的对象</param>
/// <returns>返回结果</returns>
public static bool CheckDataSetForPage(DataSet Ds, ref int ResultCount)
{
try
{
if (Ds != null && Ds.Tables.Count > 0 && Ds.Tables.Count == 2 && Ds.Tables[0].Rows.Count > 0)
{
ResultCount = Convert.ToInt32(Ds.Tables[1].Rows[0][0]);
if (ResultCount == 0)
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
catch
{
throw;
}
}
#endregion
}
#endregion
好了 最后数据提供者类就很简单了.
public class SysMangerProvider : DataProviderBaseClass ,ISysMangerProvider
{
#region 构造函数
public SysMangerProvider():base(1)
{
}
public SysMangerProvider(string connectionName):base(connectionName)
{
}
public SysMangerProvider(SelectDataBae SDB): base(SDB)
{
}
#endregion
#region 执行sql语句得到DataSet类型数据
/// <summary>
/// 执行sql语句得到DataSet类型数据
/// </summary>
/// <param name="Sqlcomm"></param>
/// <returns></returns>
public DataSet GetDataSetBySqlcomm(string Sqlcomm)
{
return base.ExecuteDataSetBySqlcomm(Sqlcomm);
}
#endregion
#region 执行sql语句获得DataSet数据 ,提供分页
/// <summary>
/// 执行sql语句获得DataSet数据 ,提供分页
/// </summary>
/// <param name="PageNo">当前行数</param>
/// <param name="PageSize">一页分页数量</param>
/// <param name="Sqlcomm">sql语句</param>
/// <returns>DataSet对象</returns>
public DataSet GetDataSetBySqlcomm(int StartRecordNo, int PageSize, string Sqlcomm,string TableName)
{
return base.ExecuteDataSetBySqlcomm(StartRecordNo, PageSize, Sqlcomm, TableName);
}
#endregion
#region 执行sql语句返回影响的行数目
/// <summary>
/// 执行sql语句返回影响的行数目
/// </summary>
/// <param name="stringcomm"></param>
/// <returns></returns>
public int ExecSqlcomm(string Sqlcomm)
{
return base.ExecIntBySqlcomm(Sqlcomm);
}
#endregion
}
在前台绑定的时候就非常简单了
int ResultCount = 0;
this.ds = this.SM.GetDataSetBySqlcomm(startIndex, this.DataGrid1.PageSize, " select * from PageInfo " ,"ShowList" );
if (DataProviderBaseClass.CheckDataSetForPage(this.ds, ref ResultCount))
{
this.DataGrid1.VirtualItemCount = ResultCount;
this.DataGrid1.DataSource = this.ds.Tables[0];
this.DataGrid1.DataBind();
}
else
{
this.Response.Write("对不起,没有获取到数据。");
}
好了 解决用微软企业库的sql语句分页问题.
相关文章推荐
- TP5分页使用方法,在使用paginate(10)后无法foreach得到的数据集合
- oracle11g使用exp语句导出数据时,导出表不全(将数据为空的表自动过滤掉)的解决方法
- 分页解决方案 之 QuickPager的使用方法(PostBack分页、自定义获取数据)
- (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)
- 微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(2)
- GridView使用DataBind方法绑定数据时的分页问题[转]
- 使用checked语句防止数据溢出的解决方法
- (八大方法、逐层深入,有你一定没见过的)使用INSERT语句向表中插入数据
- Activity中得到新打开Activity关闭后返回的数据(onActivityResult和setResult方法的使用)
- [EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(3)
- excel内一键进行sql查询(使用方法 1.选择’需要进行sql查询区域 包括字段名 2 输入sql语句 3.选择输出数据的单元格)
- 分页解决方案 之 QuickPager的使用方法(PostBack分页、自动获取数据)
- (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(2)
- 微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇
- 微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——下篇
- (八大方法、逐层深入,有你一定没见过的)使用INSERT语句向表中插入数据
- [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——下篇
- ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)
- 微软企业库4.1学习笔记(三十二)数据访问模块 在应用中使用数据访问模块
- C#中使用MySqlCommand执行插入语句后获取该数据主键id值的方法