zoukankan      html  css  js  c++  java
  • DataReader 分页和rownumber

    View Code
    /// PageList for DataReader
    /// </summary>
    /// <param name="connectionString"></param>
    /// <param name="sql"></param>
    /// <param name="pageSize"></param>
    /// <param name="curPage"></param>
    /// <param name="pageCount"></param>
    /// <param name="count"></param>
    /// <param name="cmdParms"></param>
    /// <returns></returns>
    public DataTable PageListReader(string connectionString, string sql, int pageSize, int curPage, out int pageCount, out int count, params DbParameter[] cmdParms)
    {
    int first = 0;
    int last = 0;
    int fieldCount = 0;
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
    SqlCommand cmd
    = conn.CreateCommand();
    PrepareCommand(cmd, conn,
    null, CommandType.Text, sql, cmdParms);
    SqlDataReader reader
    = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    DataTable dt
    = new DataTable();
    fieldCount
    = reader.FieldCount;
    for (int i = 0; i < fieldCount; i++)
    {
    DataColumn col
    = new DataColumn();
    col.ColumnName
    = reader.GetName(i);
    col.DataType
    = reader.GetFieldType(i);
    dt.Columns.Add(col);
    }
    count
    = 0;
    first
    = (curPage - 1) * pageSize+1;
    last
    = curPage * pageSize;
    while (reader.Read())
    {
    count
    ++;
    if (count >= first && last >= count)
    {
    DataRow r
    = dt.NewRow();
    for (int i = 0; i < fieldCount; i++)
    {
    r[i]
    = reader[i];
    }
    dt.Rows.Add(r);
    }
    }
    reader.Close();
    pageCount
    = Convert.ToInt32(Math.Ceiling((double)count / (double)pageSize));
    return dt;
    }
    }
    2.用ROW_NUMBER()分页

    /// <summary>

    /// 分页获取数据(Sql Server 2005) for ROW_NUMBER()
    /// </summary>
    /// <param name="connectionString">数据库链接</param>
    /// <param name="sql">获取数据集的Sql</param>
    /// <param name="fldSort">排序字段,可以多个</param>
    /// <param name="pageSize">每页显示多少条</param>
    /// <param name="curPage">当前页码</param>
    /// <param name="pageCount">总页数</param>
    /// <param name="count">总记录数</param>
    ///<param name="cmdParms">DbParameter</param>
    /// <returns>DataTable</returns>
    public DataTable PageList(string connectionString, string sql, string fldSort, int pageSize, int curPage, out int pageCount, out int count, params DbParameter[] cmdParms)
    {
    StringBuilder strSql
    = new StringBuilder();
    strSql.AppendFormat(
    @"SELECT count(0) from {0} as MyTableCount;
    select * from (
    SELECT ROW_NUMBER() OVER(order by {1}) RowNumber,*
    from {0} mytable
    ) mytable2
    where RowNumber between {2} and {3}
    "
    , sql, fldSort, Convert.ToString((curPage
    - 1) * pageSize + 1), Convert.ToString((curPage * pageSize)));

    DataSet ds
    = ExecuteQuery(connectionString, CommandType.Text, strSql.ToString(), cmdParms);
    count
    = Convert.ToInt32(ds.Tables[0].Rows[0][0]);
    pageCount
    = Convert.ToInt32(Math.Ceiling((double)count / (double)pageSize));
    return ds.Tables[1];
    }
  • 相关阅读:
    A4纸网页打印中对应像素的设定和换算
    网页打印2-打印界面实现
    为何 .NET 总是BUG不断?
    WEB程序员也要学习学习安全防护(一)
    用Delphi编写ASP的ActiveX
    兼容性 无提示关闭窗口
    在ASP.NET 2.0中实现本地化
    取消XP的视频预览功能
    axman 的专栏,专业,真专业
    Delphi TXMLDocument 慎用 doNodeAutoIndent
  • 原文地址:https://www.cnblogs.com/Mr0909/p/2044829.html
Copyright © 2011-2022 走看看