通用分页函数(SQLSERVER版)

博客介绍了一个在ACCESS下运行的BaseList函数,该函数可将符合指定条件的数据表记录列表绑定给DataSet返回。不过此版本存在自定义排序方式工作不正常的问题,文中给出了函数的详细代码实现,包括SQL语句构造、数据库连接及数据填充等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面的函数在ACCESS下运行也是可以的.但这个版本有一个小问题没有解决,那就是如果自定义排序方式时,会工作不正常,一直没有解决,希望大家能给出一些意见.

/// <summary>
/// 函数名称:BaseList
/// 功能描述:将符合指定条件的数据表记录列表绑定给DATASET返回
/// </summary>
/// <param name="dgList">指定装填DataSet返回给前台</param>
/// <param name="strTb">操作表名</param>
/// <param name="strField_f">指定返回给客户端的字段</param>
/// <param name="strField_l">指定返回给选择集的字段</param>
/// <param name="strQ">查询条件</param>
/// <param name="strOrder">字段排序字串</param>
/// <param name="unPage">申请显示页号</param>
/// <param name="unPageSize">每页最大显示记录数,如果取值小于1则表示全选,此时入参unPage无效</param>
/// <returns>成功则返回符合条件的记录条数,否则返回-1</returns>

protected long BaseList (ref DataSet dgList,string strTb,string strField_f,string strField_l,string strQ,string strOrder,uint unPage,uint unPageSize)
{
   OleDbConnection cnnRjb = new System.Data.OleDb.OleDbConnection();
   OleDbCommand cmdRjb=new OleDbCommand();
   OleDbDataAdapter dapLoad=new OleDbDataAdapter();
   StringBuilder stbSql=new StringBuilder("select ");    //完整SQL语句
   long lReturn=-1;
 
   //构造SQL语句
   if (strTb=="")
   {
      return(lReturn);
   }
   if (strField_f=="")
   {
      stbSql.Append("* ");
   }
   else
   {
      stbSql.Append(strField_f);     
   }
   stbSql.Append(" from ");
   if ( strQ.Length!=0 )
      stbWhere.Append(" and "+strQ);
   if ( strOrder=="" )
      strOrd=" order by id desc";
   else
      strOrd=" order by "+strOrder;
   if (unPageSize<1)
      stbSql=new StringBuilder("select "+strField+" from "+strTb+" where "+strQ+strOrd);
   else
      if (unPage<2)
         stbSql=new StringBuilder("select top "+unPageSize.ToString()+strField+" from "+strTb+" where "+strQ+strOrd);
      else
         stbSql=new StringBuilder("select top "+unPageSize.ToString()+strField+" from "+strTb+" where "+strQ+" and id not in "+"(select top "+Convert.ToString((unPage-1)*unPageSize)+" id "+" from "+strTb+" where "+strQ+strOrd+")"+strOrd);

   lgEvent.WriteLog2txt("基数据列表","SQL语句:\n"+stbSql.ToString()+"\n\n");

   Conn(cnnRjb);    //Conn为自定义的函数,作用为将定义好的链接字串赋给数据库链接函数
   cmdRjb.Connection=cnnRjb;
   dapLoad.SelectCommand=new OleDbCommand(stbSql.ToString(),cnnRjb);
   try
   {
      cnnRjb.Open();
      dapLoad.Fill(dgList,strTb);
      stbSql=new StringBuilder("select count(*) from (select id from "+strTb);
      if (strQ!="")
      {
         stbSql.Append(" where "+strQ);
      }
      stbSql.Append(") as x");
      cmdRjb.CommandText=stbSql.ToString();
      lReturn=Convert.ToInt64(cmdRjb.ExecuteScalar());
   }
   catch(Exception e)
   {
      //错误处理
   }
   finally
   {
      cnnRjb.Close();     
   }
   return(lReturn);
}

转载于:https://www.cnblogs.com/lykyl/archive/2004/06/15/15902.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值