[Asp.Net]百万级分页

        /// <param name="fieldlist"></param>字段列表,如id,title,content
        /// <param name="condition"></param>条件,如id<100
        /// <param name="pkey"></param>主键,自增
        /// <param name="tablename"></param>表的名字,如News
        /// <param name="sort"></param>排序,0表示降序,1表示升序
        /// <param name="pagesize"></param>每页大小
        /// <param name="cpage"></param>当前页码
        public DataSet GetCurrentDataSet(string fieldlist, string condition, string pkey, string tablename, int sort, int pagesize, int cpage)//得到当前页记录
        {
            DBCon OAcon = new DBCon();
            SqlConnection conn = new SqlConnection(OAcon.getOAcon());
            SqlDataAdapter cmd = new SqlDataAdapter(GetSql(fieldlist, condition, pkey, tablename, sort, pagesize, cpage), conn);
            DataSet ds = new DataSet();
            cmd.Fill(ds);
            return ds;
        }
        static string GetSql(string fieldlist, string condition, string pkey, string tablename, int sort, int pagesize, int cpage)
        {
            string sql = "";
            if (sort == 0)
            {
                if (condition != "")
                {
                    sql = "select top " + pagesize.ToString() + " " + fieldlist + " from " + tablename + " where " + condition + " and " + pkey + " not in(select top " + pagesize * (cpage - 1) + " " + pkey + " from " + tablename + " where " + condition + " and order by " + pkey + " desc) order by " + pkey + " desc";
                }
                else
                {
                    sql = "select top " + pagesize.ToString() + " " + fieldlist + " from " + tablename + " where " + pkey + " not in(select top " + pagesize * (cpage - 1) + " " + pkey + " from " + tablename + " order by " + pkey + " desc) order by " + pkey + " desc";
                }
            }
            else
            {
                if (condition != "")
                {
                    sql = "select top " + pagesize.ToString() + " " + fieldlist + " from " + tablename + " where " + condition + " and " + pkey + " not in(select top " + pagesize * (cpage - 1) + " " + pkey + " from " + tablename + " where " + condition + " and order by " + pkey + " asc) order by " + pkey + " asc";
                }
                else
                {
                    sql = "select top " + pagesize.ToString() + " " + fieldlist + " from " + tablename + " where " + pkey + " not in(select top " + pagesize * (cpage - 1) + " " + pkey + " from " + tablename + " order by " + pkey + " asc) order by " + pkey + " asc";
                }
            }
            return sql;
        }
        public int GetCounts(string pkey, string tablename, string condition)//得到总记录数
        {
            string sql;
            if (condition != "")
            {
                sql = "select count(" + pkey + ") from " + tablename + " where " + condition;
            }
            else
            {
                sql = "select count(" + pkey + ") from " + tablename;
            }
            DBCon OAcon = new DBCon();
            SqlConnection conn = new SqlConnection(OAcon.getOAcon());
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            dr.Read();
            string str = dr[0].ToString();
            dr.Close();
            return Convert.ToInt32(str);
        }
        public DataSet GetCurrentDataSet2(string tbName, string tbFields, string OrderField, int PageSize, int PageIndex, bool OrderType)
        {
            SqlParameter[] parameters = new SqlParameter[8];
            parameters[0] = new  SqlParameter("@tbName", SqlDbType.NVarChar,255);
            parameters[1] = new SqlParameter("@tbFields", SqlDbType.NVarChar, 1000);
            parameters[2] =new SqlParameter("@OrderField", SqlDbType.NVarChar,1000 );
            parameters[3] =new SqlParameter("@PageSize", SqlDbType.Int);
            parameters[4] =new SqlParameter("@PageIndex", SqlDbType.Int);
            parameters[5]=new SqlParameter("@OrderType", SqlDbType.Bit);
            parameters[6] =new SqlParameter("@strWhere", SqlDbType.VarChar,1000);
            parameters[7]=new SqlParameter("@Total", SqlDbType.Int);
 
            parameters[0].Value = tbName;
            parameters[1].Value = tbFields;
            parameters[2].Value = OrderField;
            parameters[3].Value = PageSize;
            parameters[4].Value = PageIndex;
            parameters[5].Value = 1;
            parameters[6].Value = "";
            parameters[7].Value = 0;

            TX.DataAccess.DABaseAccess db = new TX.DataAccess.DABaseAccess();
             

            return db.RunprocToDataSet("SqlDataPaging", parameters);  //DbHelperSQL.RunProcedure("SqlDataPaging", parameters, "ds");
        }

 

在网上找了一个 Asp数据操作组件(百万分页) ,实用环境:Asp+DLL+MsSQL(这个网上很多地方都可以下载),并且其中结合SQL存储过程,说实话以前SQL存储过程接触的比较少,所以在调试该组件的时候遇到了一些问题,并试着改了一下(作者别生气(^..^)),高手们别笑话我。 原代码如下: 有分页列表数据: cls.tblName="Tablename" '表名 cls.fldName="Id" '排序关键字段 cls.PageIndex=Request("P")*1 '当前页码 cls.PageSize=20 '每页列数 cls.OrderType=1 '排序方式,0 、1 cls.strWhere=StrW '查询条件,不带Where cls.ListUrl="?Y="&Y&"&M="&M&"&D="&D&"&Sn="&Sn&"&P=" 分页URL Set Rs=cls.Result do while not rs.eof rs.movenext loop 分页数据 cls.page 在原文的使用说明中,在翻页代码中对表查询默认是全部字段也就是*,这样是不是会浪费资源,而无法查询需要的字段,于是我在DLL代码中新加入一个变量名为zdName,作为传递可控制查询条件的变量,同时在SQL存储过程中也加入相应的接受变量@zdName 字符型。 在这个小问题解决后,又在使用上发现cls.strWhere付给它的变量StrW 如果条件变量其中带有类似 例如 a='b'则执行SQL存储过程时候会提示错误,后来发现是DLL代码中: sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",'" & strWhere & "' " 这个地方是否写的不够严谨,在StrW中如果含有单引,那么将无法执行,所以我在DLL的VB代码改成 If InStr(strWhere, "'") 0 Then sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",""" & strWhere & """ " Else sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",'" & strWhere & "' " End If 试了试目前的问题确实解决了,这个组件我也是刚刚使用,希望对大家能有点帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厦门德仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值