http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 59716|回复: 43
打印 上一主题 下一主题

[Asp.Net] 三层架构+存储过程后台分页+AspNetPager前台分页的经典例子

[复制链接]
跳转到指定楼层
发表于 2012-7-3 12:30:48 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
是在下经心为初学三层架构的同志打造的例子,一定会对你深入的理解这个架构
有一定的帮助,在这个例子中还用到的分页的存储过程,用的是Sql2005里新加的Rownumber()函数,是最好最简单的分页,加上前台的AspNetPager实现的分页效果,你还等什么来学一下吧,附有源代码可以下载,下载直接要吧运行,
所需的环境:VS2008+sql2005
代码就开放过么多,大家有什么不明白的就留言问我,也可以给我要源代码呵呵
源代码下载: AspNetPager.rar (690.16 KB, 下载次数: 1002)
1.先来看一张实现后的图片吧

这 是实现后的效果,还不错吧,上面的分页效果一定和你想要的差不多吧,怎么实现的呢,来和我一起学习一下吧,
2.首先我们要写一个分页的存储过程
[SQL] 纯文本查看 复制代码
USE [base]
GO
/****** 对象:  StoredProcedure [dbo].[sufeiAll]    脚本日期: 03/10/2009 10:03:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sufeiAll]
@startIndex INT, --这里是当前的页码
@pageSize INT --这里是分页的大小
AS
with SClass as(     --生成一个新的表,表中的数据是从()里得到的,写起来也方便,只要把想要的写在()里就OK了
select row_number() over(order by userName) as rownumber,--一个新的行是从1到N
userName,pwd,sex,age
from sufei )
/**上半句产生一个临时表,表名为SClass,其内容来自于自查询select row_number().**/
select  userName,pwd,sex,age 
from SClass
where rownumber >=(@startindex-1)*@pagesize+1 and rownumber<=(@startindex-1)*@pagesize+(@pagesize)

select count(*) from dbo.sufei--返回所有的行

---在这个存储过程里一共会返回两个表,第一个是所有的数据,第二个是总记录数


点上面的链接要吧查询看存储过程
表非常的简单只有四个字段,全是Varchar(50)
看过了上面的存储过程我们下面要做的就是怎么来用他
3.我们来搭建一个我们的MVc吧,
第一层,DAo层
里面有三个类第一个
首先来看一张图说明一下三层的样子,呵呵


下面我给出三层的代码
EmployeesDao层
1.SqlDBHelper.cs
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace EmployeesDao
{
    /**//// 功能(Function):存放对数据库的访问方法、变量
    /// 编写日期 2009-2-21  
    /// 编写人sufei  
    /// <summary>
    /// 访问数据所用的代码,此类为一个抽象的类
    /// 不能实例化,真接用类名调用即可
    /// </summary>
    public abstract class SqlDBHelper
    {
        //获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改
        public static readonly string sufeiConncetin = "Data Source=sufei\\SQLEXPRESS;Initial Catalog=base;Integrated Security=true";

        /**//// <summary>
        ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
        /// 使用参数数组形式提供参数列表 
        /// </summary>
        /// <remarks>
        /// 使用示例:
        ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
        /// </remarks>
        /// <param name="connectionString">一个有效的数据库连接字符串</param>
        /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
        /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
        /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
        /// <returns>返回一个数据值表示此SqlCommand命令执行后影响的行数</returns>
        public static int ExecteNonQuery(string conncetionString, CommandType cmdType, string cmdText, params SqlParameter [] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            using (SqlConnection conn = new SqlConnection(conncetionString))
            {
                //通过PrePareCommand方法将参数逐个传入到SqlCommand的参数集合中
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();
                //清空SqlCommand中的参数列表
                cmd.Parameters.Clear();
                return val;
            }       
        }

        /**//// <summary>
        /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接
        /// 使用参数数组提供参数
        /// </summary>
        /// <remarks>
        /// 使用示例:
        /// DataTable table=GetTable(conn,CommandType.StoredProcedure,"PublishOrders");
        /// </remarks>
        /// <param name="connecttionString">一个现有的数据库连接</param>
        /// <param name="cmdTye">SqlCommand命令类型</param>
        /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
        /// <returns>返回一个表(DataTable)表示查询得到的数据集</returns>
        public static DataTableCollection GetTable(string connecttionString, CommandType cmdTye, string cmdText,params SqlParameter [] commandParameters)
        {
            SqlCommand cmd = new SqlCommand();
            DataSet ds = new DataSet();
            using (SqlConnection conn = new SqlConnection(connecttionString))
            {
                PrepareCommand(cmd, conn, null, cmdTye, cmdText,commandParameters);
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = cmd;
                adapter.Fill(ds);
            }
            //返回一个表集
            return ds.Tables;
        }

        /**////<summary>
        ///为执行命令准备参数
        ///</summary>
        ///<param name="cmd">Sqlcommang命令</param>
        ///<param name="conn">已经存在的数据库连接</param>
        ///<param name="trans">数据库事物处理</param>
        ///<param name="cmdType">SqlCommand命令类型(存储过程,T-Sql语句,等等。)</param>
        ///<param name="cmdText">Command text,T-Sql语句,例如:Select * from sufei</param>
        ///<param name="cmdParms">返回带参数的命令</param>
        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
        {
            //判断数据库连接状态
            if (conn.State != ConnectionState.Open)
                conn.Open();

            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            //判断是否需要事物处理
            if (trans != null)
                cmd.Transaction = trans;

            cmd.CommandType = cmdType;

            if (cmdParms != null)
            {
                foreach (SqlParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
            }
        }
    }
}


2.SqlFiled.cs
[C#] 纯文本查看 复制代码
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/**//// <summary>
///SqlFiled 的摘要说明
/// </summary>
namespace EmployeesDao
{
    public class SqlFiled
    {
        /**//// <summary>
        /// sufei表用于存放一些测试信息
        /// </summary>
        /// <summary>
        /// sufei
        /// </summary>
        public static string userName="@userName",pwd="@pwd",sex="@sex",age="@age";

    }
}

3.SqlSTring.cs
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EmployeesDao
{
    public class SqlSTring
    {
        //查询所有的Manage#region//查询所有的Manage

        /**//// <summary>
        ///删除一个管理员
        /// </summary>
        public static string selectdelete = @"selectDelete";

        /**////<summary>
        ///查询所有
        ///</summary>
        public static string sufeiAll = @"sufeiAll";

        /**////<summary>
        ///添加一个用户
        ///</summary>
        public static string sufeiOneInsert = @"sufei_Insert";

        /**////<summary>
        ///根据用户名查询一个用户的详细信息
        ///</summary
        public static string sufeiOneSelectByuserName = @"sufeiOneSelectByuserName";

        ///<summary>
        ///根据用户名修改相应的用户信息
        ///</summary
        public static string sufeiOneUpdateByuserName = @"sufeiOneUpdateByuserName";
        #endregion
    }
}




下面是EmployeesModel层
在这里只有一个叫sufei.cs的类是一个实体类,主要是用来传值的
[C#] 纯文本查看 复制代码
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

/// <summary>
///sufei 的摘要说明
/// </summary>
namespace EmployeesModel
{
   public  class sufei
    {
        //封装姓名
        private string userName;

        public string UserName
        {
            get { return userName; }
            set { userName = value; }
        }
        //封装密码
        private string pwd;

        public string Pwd
        {
            get { return pwd; }
            set { pwd = value; }
        }
        //封装性
        private string sex;

        public string Sex
        {
            get { return sex; }
            set { sex = value; }
        }
        //封装年龄
        private string age;

        public string Age
        {
            get { return age; }
            set { age = value; }
        }
    }
}


下面的Bll层这里面写的是所有的访问方法
sufeiServers.cs
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using EmployeesDao;
using EmployeesModel;
using System.Data.SqlClient;

namespace EmployeesBLL
{
    public class sufeiServers
    {
        /**//// <summary>
        /// 获取所有管理员(编号,姓名,密码,权限,状态)信息
        /// </summary>
        /// <returns>所有管理员(编号,姓名,密码,权限,状态)信息</returns>
        public DataTableCollection GetAllSufei(int startIndex, int pageSize)
        {
            //添加两个参数
            SqlParameter[] parms = new SqlParameter[] 
            { 
                 new SqlParameter("@startIndex" ,SqlDbType.Int),
                 new SqlParameter("@pageSize",SqlDbType.Int)
            };
            //给参赋值
            parms[0].Value = startIndex;
            parms[1].Value = pageSize;
            DataTableCollection table = SqlDBHelper.GetTable(SqlDBHelper.sufeiConncetin, CommandType.StoredProcedure, SqlSTring.sufeiAll,parms);
            return table;
        }

        /**//// <summary>
        /// 根据用户的用户名删除用户的信息
        /// </summary>
        /// <returns>如果返回为true删除成功,如果返回为false删除失败</returns>
        public Boolean DeleteOneSufei(sufei objsufei)
        {
            //添加一个参数
            SqlParameter[] parms = new SqlParameter[] 
            { 
                new SqlParameter(SqlFiled.userName ,SqlDbType.VarChar,11)
            };
            //给参赋值
            parms[0].Value = objsufei.UserName;
            int result = SqlDBHelper.ExecteNonQuery(SqlDBHelper.sufeiConncetin, CommandType.StoredProcedure, SqlSTring.selectdelete, parms);
            if (result > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /**//// <summary>
        /// 插入一条数据
        /// </summary>
        /// <returns>如果返回为true添加成功,如果返回为false添加失败</returns>
        public Boolean InserSufei(sufei objsufei)
        {
            //添加四个参数
            SqlParameter[] parms = new SqlParameter[]
            {
                new SqlParameter (SqlFiled .userName ,SqlDbType .VarChar ,50),
                new SqlParameter (SqlFiled .pwd ,SqlDbType .VarChar ,50),
                new SqlParameter (SqlFiled .sex ,SqlDbType .VarChar ,50),
                new SqlParameter (SqlFiled .age ,SqlDbType .VarChar ,50)
            };
            parms[0].Value = objsufei .UserName;
            parms[1].Value = objsufei .Pwd ;
            parms[2].Value = objsufei .Sex ;
            parms[3].Value = objsufei .Age ;
            int result = SqlDBHelper.ExecteNonQuery(SqlDBHelper.sufeiConncetin, CommandType.StoredProcedure, SqlSTring.sufeiOneInsert, parms);
            if (result > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /**//// <summary>
        /// 查询一条数据
        /// </summary>
        /// <returns>返回一个DataTable代表的是数据的集合</returns>
        public DataTable sufeiOneSelect(sufei objsufei)
        {
            SqlParameter[] parms = new SqlParameter[]
            {
                new SqlParameter (SqlFiled .userName ,SqlDbType .VarChar ,50)
            };
            parms[0].Value = objsufei.UserName;

            DataTable objdable = SqlDBHelper.GetTable(SqlDBHelper.sufeiConncetin, CommandType.StoredProcedure, SqlSTring.sufeiOneSelectByuserName, parms)[0];
            return objdable;
        }

        /**//// <summary>
        /// 更新一条数据
        /// </summary>
        /// <returns>如果返回为true修改成功,如果返回为false修改失败</returns>
        public Boolean sufeiOneUpdate(sufei objsufei)
        {
            SqlParameter[] parms = new SqlParameter[]
            {
                new SqlParameter(SqlFiled .userName ,SqlDbType .VarChar ,50),
                new SqlParameter (SqlFiled .pwd ,SqlDbType .VarChar ,50),
                new SqlParameter (SqlFiled .sex,SqlDbType .VarChar ,50),
                new SqlParameter (SqlFiled .age ,SqlDbType .VarChar ,50)
            };
            parms[0].Value = objsufei.UserName;
            parms[1].Value = objsufei.Pwd;
            parms[2].Value = objsufei.Sex;
            parms[3].Value = objsufei.Age;
            int result = SqlDBHelper.ExecteNonQuery(SqlDBHelper.sufeiConncetin, CommandType.StoredProcedure, SqlSTring.sufeiOneUpdateByuserName, parms);
            if (result > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

    }
}

这里给出 是的一个前台的界面,有助于大家的学习
[C#] 纯文本查看 复制代码
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using EmployeesBLL;
using EmployeesModel;

public partial class _Default : System.Web.UI.Page
{
    /**//// 编写日期 2009-2-21  
    /// 编写人sufei  
    /// <summary>
    /// 前台界面实现对表的增删改查操作
    /// </summary>

    //产生一个类的对象,用于完成对sufei表的管理
    sufeiServers objManageServers = new sufeiServers();
    //定义一人静态的表用于存放数据
    private static DataTable dt_Sufei = new DataTable();
    //用于刷新数据的方法

    private void BinderDataGriedView()
    {
        try
        {
            dt_Sufei = objManageServers.GetAllSufei(AspNetPager1.CurrentPageIndex, AspNetPager1.PageSize)[0];
            AspNetPager1.RecordCount = Convert.ToInt32(objManageServers.GetAllSufei(AspNetPager1.CurrentPageIndex, AspNetPager1.PageSize)[1].Rows[0][0].ToString().Trim());
            //把数据库中的数据英文字段中文化
            dt_Sufei.Columns[0].ColumnName = "用户名";
            dt_Sufei.Columns[1].ColumnName = "密码";
            dt_Sufei.Columns[2].ColumnName = "性别";
            dt_Sufei.Columns[3].ColumnName = "年龄";
            gvSufei.DataSource = dt_Sufei;
            gvSufei.DataBind();
        }
        catch (Exception ex)
        {
            lblMessage.Visible = true;
            lblMessage.Text = ex.Message.ToString().Trim();
        }
    }

    //加载时执行
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            //非首次加载不执行
            if (!IsPostBack)
            {
                BinderDataGriedView();
            }
        }
        catch (Exception ex)
        {
            lblMessage.Visible = true;
            lblMessage.Text = ex.Message.ToString().Trim();
        }
    }

    //删除一个数据
    protected void gvSufei_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            //调用ManageServers类的DeleteOneManager方法用于删除一个数据
            //产生一个实体的对象
            sufei objsufei = new sufei();
            objsufei.UserName = gvSufei.Rows[e.RowIndex].Cells[2].Text.ToString().Trim();
            if (objManageServers.DeleteOneSufei(objsufei))
            {
                lblMessage.Visible = true;
                lblMessage.Text = "删除成功";
            }
            else
            {
                lblMessage.Visible = true;
                lblMessage.Text = "删除失败";
            }
            //刷新数据
            BinderDataGriedView();
        }
        catch (Exception ex)
        {
            lblMessage.Visible = true;
            lblMessage.Text = ex.Message.ToString().Trim();
        }
    }

    //添加
    protected void btnEnter_Click(object sender, EventArgs e)
    {
        try
        {
            //产生一个实体的对角
            sufei objsufei = new sufei();
            objsufei .UserName=txtUserName.Text.ToString().Trim();
            objsufei .Pwd =txtUserPwd.Text.ToString().Trim();
            objsufei .Sex = txtSex.Text.ToString().Trim();
            objsufei .Age = txtAge.Text.ToString().Trim();
            //在这里是把上面的数据封装成一个对象
             //调用ManageServers类的方法InsertSufei用于添加一个数据
            if (objManageServers.InserSufei(objsufei))
            {
                lblMessage.Visible = true;
                lblMessage.Text = "添加成功";
            }
            else
            {
                lblMessage.Visible = true;
                lblMessage.Text = "添加失败";
            }
            //刷新数据
            BinderDataGriedView();
        }
        catch (Exception ex)
        {
            lblMessage.Visible = true;
            lblMessage.Text = ex.Message.ToString().Trim();
        }
    }

    //转到修改界面
    protected void gvSufei_SelectedIndexChanged(object sender, EventArgs e)
    {
        Response.Redirect("sufeiUpdate.aspx?username=" + gvSufei.SelectedRow.Cells[2].Text.ToString().Trim());
    }

    //分页时执行
    protected void AspNetPager1_PageChanged1(object sender, EventArgs e)
    {
        BinderDataGriedView();
    }
}

好了就到这里吧,数据库与全部代码都在文章头部可以下载请大家参考,
需要回复才能下载哦


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
43
发表于 2021-7-30 11:04:06 | 只看该作者
不错,来看看
42
发表于 2019-3-18 21:41:34 | 只看该作者
强烈支持楼主ing……
41
发表于 2017-6-24 02:38:59 | 只看该作者
回复

使用道具 举报

40
发表于 2016-4-21 15:10:13 | 只看该作者
强烈支持楼主ing……
39
发表于 2016-3-21 17:42:22 | 只看该作者
强烈支持楼主ing……
38
发表于 2015-7-15 09:39:34 | 只看该作者
站长威武
回复

使用道具 举报

37
发表于 2015-4-26 23:24:28 | 只看该作者
下载了 膜拜中....!
36
发表于 2015-3-26 09:53:23 | 只看该作者
赞赞赞
回复

使用道具 举报

35
发表于 2015-2-10 15:30:21 | 只看该作者
试试一下
回复

使用道具 举报

34
发表于 2014-10-12 12:15:24 | 只看该作者
不错,感谢分享!!!!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-18 04:20

© 2014-2021

快速回复 返回顶部 返回列表