Asp.net 中通用分页解决办法

原创 2007年09月27日 23:20:00

www.studyez.com网站的开发中,经常涉及到数据的分页.搞得人是不胜其烦.因此就想尽量想把分页相关统一起来.

因此,就把分页的统一了一下.暂时记录一下.

------------------------------------CSer.cs源码-----------------------------

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections.Generic;
/// <summary>
/// Summary description for BaseSplitPage
/// </summary>
public abstract class BaseSplitPage<T, U> : IDisposable where U : List<T>, new()
{
    private SqlConnection _cnn;

    private SqlCommand _cproc;
    private SqlCommand _lproc;

    protected BaseSplitPage(string countProc, string listProc)
    {
        //
        // TODO: Add constructor logic here
        //
        _cnn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[0].ConnectionString);
        _cproc = new SqlCommand(countProc, _cnn);
        _cproc.CommandType = CommandType.StoredProcedure;
        _cproc.Parameters.Add("@strFilter", SqlDbType.NVarChar, 200);
        _lproc = new SqlCommand(listProc, _cnn);
        _lproc.CommandType = CommandType.StoredProcedure;
        _lproc.Parameters.Add("@startRecord", SqlDbType.Int);
        _lproc.Parameters.Add("@maxRecord", SqlDbType.Int);
        _lproc.Parameters.Add("@strFilter", SqlDbType.NVarChar, 200);
        _lproc.Parameters.Add("@strOrder", SqlDbType.NVarChar, 200);

    }
    public int RecordCount(string strFilter)
    {
        int res = 0;
        try
        {
            _cnn.Open();
            _cproc.Parameters[0].Value = strFilter;
            res = (int)_cproc.ExecuteScalar();

        }
        finally
        {
            _cnn.Close();
        }
        return res;

    }
    public U List(int startRecord, int maxRecord, string strFilter, string strOrderExpress)
    {
        U u = new U();
        try
        {
            _cnn.Open();
            _lproc.Parameters[0].Value = startRecord;
            _lproc.Parameters[1].Value = maxRecord;
            _lproc.Parameters[2].Value = strFilter;
            _lproc.Parameters[3].Value = strOrderExpress;
            SqlDataReader dr = _lproc.ExecuteReader(CommandBehavior.CloseConnection);
            if (dr != null)
            {
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        u.Add(CreateFormDB(dr));
                    }
                }
                dr.Close();
            }

        }
        finally
        {
            _cnn.Close();
        }
        return u;
    }

    protected abstract T CreateFormDB(IDataRecord dr);

    #region IDisposable Members
    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
            if (_cnn != null)
                _cnn.Dispose();
            if (_cproc != null)
                _cproc.Dispose();
            if (_lproc != null)
                _lproc.Dispose();
        }
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    #endregion
}
public enum Sex
{
    /// <summary>
    /// 公的
    /// </summary>
    Gong,
    /// <summary>
    /// 母的
    /// </summary>
    Mu,
    /// <summary>
    /// 太监
    /// </summary>
    TaiJian

}
[Serializable]
public class Cser
{
    private int _age;
    private Sex _sex;
    public Cser()
    {
    }
    public Cser(int age, Sex sex)
    {
        _age = age;
        _sex = sex;

    }
    public int Age
    {
        get { return _age; }
        set { _age = value; }
    }
    public Sex GorM
    {
        get { return _sex; }
        set { _sex = value; }
    }
}
public class CserCollection:List<Cser>
{
}
public class CserSplitPage:BaseSplitPage<Cser ,CserCollection>
{
   public CserSplitPage():base("cs_userCount","cs_userList")
   {
   }


   protected override Cser CreateFormDB(IDataRecord dr)
   {
         int age=(int)dr["Age"];
         Sex sex=(Sex)Enum.Parse(typeof(Sex),(string)dr["Sex"]);
         return new Cser(age,sex );
   }
}

 

public class   UserPage
{
         public void Run()
         {
             using(CserSplitPage sp=new CserSplitPage())
             {
                sp.RecordCount(" Age=10");
             }
         }
}

 

这个东西支持单表还行,多表联合就不怎么好用.看过也用过一些ORM产品,可是老是找不到一个省心省事.

----------------------------------End--------------------------------------
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

通用分页类 (asp.net C#)

数据分页一直以来是比较头疼的问题,不少的分页控件也随之产生。但是我用过的几个控件,本身都要执行SQL,对存储过程支持不好,为了方便,特别写了个通用分页类,利用PagedDataSource来实现Dat...

ASP.NET中Repeater控件和DataList控件通用的分页类

本文利用PagedDataSource+Repeater控件实现数字分页, DataList控件也可以通过修改ID名称实现分页。 /// /// Repeater分页 /// /// DataS...

ASP.Net中session丢失的解决办法

一、 引发 Session 丢失的几种原因 动过手写代码的人都知道,Session 丢失是比较常见的事。以下是本人这几年所遇到的,能够引发 Session 丢失的原因,不敢说是百分百,丢失概率还...

Asp.net 发送大量邮件超时的解决办法

我们知道在.Net中发送邮件使用的是SmtpClient 类,比如简单的如下:             SmtpClient client = new SmtpClient(args[0]...

ASP.NET WEBAPI 接入微信公众平台总结,Token验证失败解决办法

ASP.NET WEBAPI 接入微信公众平台总结,Token验证失败解决办法! 1.微信公众平台的接入方法,无非4个参数(signature, timestamp, nonce, echostr)加...

ASP.NET中引用dll“找不到指定模块"的完美解决办法

最近继续用ASP.Net来重新开发ACM的Online Judge系统,因为要进行进程的监控,所以自己编写了一个非托管的DLL供ASP.Net调用。我用的是VS2005的开发环境,后来发现使用[Dll...

ASP.NET Identity V2在多线程中UserManager获取的httpContext.Current始终为null的解决办法

最近需要在Quartz一个定时器中没隔段时间执行一个操作,在这个过程当中需要获取到 ApplicationUserManager 对象。因为原来这些对象是在控制器中定义的,为了使用,特意把其挪到了定时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)