ASP.Net存储过程实现分页+三层架构

.NET ASP.NET 中web窗体数据分页显示案列 数据库数据-User表: 分页查询存储过程: create proc [dbo].[selectuser] @pagesize int, @pageindex int as select top (@pagesize) * from (select row_number() over(order by ID asc) as rownumber,* from [User]) temp_... 阅读详情

在这里插入图片描述

CREATE PROCEDURE Sp_page @strTable      VARCHAR(50),--表名 
                         @strColumn     VARCHAR(50),--按该列来进行分页 
                         @intColType    INT, 
                         --@strColumn列的类型,0-数字类型,1-字符类型,2-日期时间类型 
                         @intOrder      BIT,--排序,0-顺序,1-倒序 
                         @strColumnlist VARCHAR(800), 
                         --要查询出的字段列表,*表示全部字段 
                         @intPageSize   INT,--每页记录数 
                         @intPageNum    INT,--指定页 
                         @strWhere      VARCHAR(800),--查询条件 
                         @intPageCount  INT output --总页数 
AS 
    DECLARE @sql NVARCHAR(4000) --用于构造SQL语句 
    DECLARE @where1 VARCHAR(800) --构造条件语句 
    DECLARE @where2 VARCHAR(800) --构造条件语句 

    IF @strWhere IS NULL 
        OR Rtrim(@strWhere) = '' 
      -- 为了避免SQL关键字与字段、表名等连在一起,首先为传入的变量添加空格 
      BEGIN --没有查询条件 
          SET @where1=' WHERE ' 
          SET @where2=' ' 
      END 
    ELSE 
      BEGIN --有查询条件 
          SET @where1=' WHERE (' + @strWhere + ') AND ' 
          SET @where2=' WHERE (' + @strWhere + ') ' 
      END 

    SET @strColumn = ' ' + @strColumn + ' ' 
    SET @strColumnlist = ' ' + @strColumnlist + ' ' 
    --构造SQL语句,计算总页数。计算公式为 总页数 = Ceiling ( 记录个数 / 页大小 ) 
    SET @sql='SELECT @intPageCount=CEILING((COUNT(*)+0.0)/' 
             + Cast(@intPageSize AS VARCHAR) + ') FROM ' 
             + @strTable + @where2 

    --执行SQL语句,计算总页数,并将其放入@intPageCount变量中 
    EXEC Sp_executesql 
      @sql, 
      N'@intPageCount int OUTPUT', 
      @intPageCount output 

    --将总页数放到查询返回记录集的第一个字段前,此语句可省略 
    SET @strColumnlist= Cast(@intPageCount AS VARCHAR(30)) 
                        + ' as PageCount,' + @strColumnlist 

    IF @intOrder = 0 --构造升序的SQL 
      SET @sql='SELECT TOP ' 
               + Cast(@intPageSize AS VARCHAR) + ' ' 
               + @strColumnlist + ' FROM ' + @strTable + @where1 
               + @strColumn + '>(SELECT MAX(' + @strColumn + ') ' 
               + ' FROM (SELECT TOP ' 
               + Cast(@intPageSize*(@intPageNum - 1) AS VARCHAR) 
               + @strColumn + ' FROM ' + @strTable + @where2 
               + 'ORDER BY ' + @strColumn + ') t) ORDER BY ' 
               + @strColumn 
    ELSE --构造降序的SQL 
      SET @sql='SELECT TOP ' 
               + Cast(@intPageSize AS VARCHAR) + ' ' 
               + @strColumnlist + ' FROM ' + @strTable + @where1 
               + @strColumn + '<(SELECT MIN(' + @strColumn + ') ' 
               + ' FROM (SELECT TOP ' 
               + Cast(@intPageSize*(@intPageNum - 1) AS VARCHAR) 
               + @strColumn + ' FROM ' + @strTable + @where2 
               + 'ORDER BY ' + @strColumn 
               + ' DESC) t) ORDER BY ' + @strColumn + ' DESC' 

    IF @intPageNum = 1--第一页 
      SET @sql='SELECT TOP ' 
               + Cast(@intPageSize AS VARCHAR(10)) + ' ' 
               + @strColumnlist + ' FROM ' + @strTable + @where2 
               + ' ORDER BY ' + @strColumn + CASE @intOrder WHEN 0 THEN '' ELSE 
               ' DESC' END 

    --PRINT @sql 
    EXEC(@sql) 

go 

存储过程使用示例

DECLARE @intPageCount INT 

EXEC Sp_page 
  'stuInfo',--表名 
  'stuNO',--按该列来进行分页 
  0,-- 0-数字类型,1-字符类型,2-日期时间类型 
  0,-- 0-顺序,1-倒序 
  '*',--要查询出的字段列表,*表示全部字段 
  2,--每页记录数 
  1,--指定页 
  '',--查询条件 
  @intPageCount output 

PRINT @intPageCount 

数据库表:

数据库表

项目的数据模块图:

项目结构图

BLL层:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WebApplication3.DAL;
using WebApplication3.Model;
namespace WebApplication3.BLL
{
   
    public class UserInfoBLL
    {
        UserInfoDAL userDal = new UserInfoDAL();
        public object loadData(UserInfo user)
        {
           return userDal.loadData(user);
        }
        public int Count()
        {
            int count = UserInfoDAL.count;
            return count;
        }
    }
}

DAL层:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using WebApplication3.Model;
namespace WebApplication3.DAL
{
    public class UserInfoDAL
    {
        SQLHelper sqlHelp = new SQLHelper();
        public static int  count;
        public object loadData(UserInfo user)
        {
            SqlParameter[] paraValues = {
                                        new SqlParameter("@strTable",SqlDbType.VarChar),
                                        new SqlParameter("@strColumn",SqlDbType.VarChar),
                                        new SqlParameter("@intColType",SqlDbType.Int),
                                        new SqlParameter("@intOrder",SqlDbType.Int),
                                        new SqlParameter("@strColumnlist",SqlDbType.VarChar),
                                        new SqlParameter("@intPageSize",SqlDbType.Int),
                                        new SqlParameter("@intPageNum",SqlDbType.Int),
                                        new SqlParameter("@strWhere",SqlDbType.VarChar),
                                        new SqlParameter("@intPageCount",SqlDbType.Int)
                                        };
            paraValues[0].Value = user.tableName;
            paraValues[1].Value = user.Column;
            paraValues[2].Value = user.ColType;
            paraValues[3].Value = user.Order;
            paraValues[4].Value =user.Columnlist;
            paraValues[5].Value = user.PageSize;
            paraValues[6].Value = user.PageNum;
            paraValues[7].Value = user.Where;
            paraValues[8].Direction = ParameterDirection.Output;
            object obj = sqlHelp.ExecuteProcTable("sp_page", paraValues);
            count = Convert.ToInt32(paraValues[8].Value);
            return obj;
        }
    }
}

Model层(Entity类):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication3.Model
{
    public class UserInfo
    {
        public string tableName { get; set; }
        public string Column { get; set; }
        public int ColType { get; set; }
        public int Order { get; set; }
        public string Columnlist { get; set; }
        public int PageSize { get; set; }
        public int PageNum { get; set; }
        public string Where { get; set; }
        //public string PageCount { get; set; }
    }
}

UI层:前台代码(WebForm1.aspx)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication3.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript">
  function integer() {
    var num = document.getElementById("TextBox1").value;
    if (num=="") {
      alert('请输入内容');
      return false;
    }
    if (!(/(^[1-9]\d*$)/.test(num))) {
      alert('输入的不是正整数');
      return false;
    } else {
        return true;
    }
  }
</script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
            <Columns>
                <asp:BoundField DataField="stuNO" HeaderText="学号" />
                <asp:BoundField DataField="stuName" HeaderText="姓名" />
            </Columns>
        </asp:GridView>
        <div>
            <asp:Button ID="btnFirst" runat="server" OnClick="btnFirst_Click" Text="首页" style="height: 21px" />
            <asp:Button ID="btnPre" runat="server" OnClick="btnPre_Click" Text="上一页" />
            <asp:Button ID="btnNext" runat="server" OnClick="btnNext_Click" Text="下一页" style="height: 21px" />
            <asp:Button ID="btnLast" runat="server" OnClick="btnLast_Click" Text="最后一页" />
            <asp:TextBox ID="TextBox1" runat="server" Width="83px"></asp:TextBox>
            <asp:Button ID="btnGO" runat="server" OnClientClick="integer()" OnClick="btnGO_Click" Text="跳转" />
        </div>
        <p>
            <asp:Label ID="Label1" runat="server"></asp:Label>
            <asp:Label ID="Label2" runat="server"></asp:Label>
            <asp:Label ID="Label3" runat="server" Text="每页显示条数"></asp:Label>
            <asp:DropDownList ID="DropDownList1" runat="server">
                <asp:ListItem>1</asp:ListItem>
                <asp:ListItem Selected="True">2</asp:ListItem>
                <asp:ListItem>5</asp:ListItem>
                <asp:ListItem>10</asp:ListItem>
            </asp:DropDownList>
            <asp:Button ID="btnOK" runat="server" OnClick="btnOK_Click" Text="确认" />
        </p>
    </form>
</body>
</html>

UI层:后台代码(WebForm1.aspx.cs)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebApplication3.BLL;
using WebApplication3.DAL;
using WebApplication3.Model;
namespace WebApplication3
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        UserInfoBLL userBll = new UserInfoBLL();
        UserInfo user = new UserInfo();
        int count = 1;
        private void loadData()
        {
            count = Convert.ToInt32(ViewState["count"]);
            user.tableName = "stuInfo";
            user.Column = "stuNO";
            user.ColType = 0;
            user.Order = 0;
            user.Columnlist = "*";
            user.PageSize = Convert.ToInt32(DropDownList1.SelectedItem.Text);
            user.PageNum = count;
            user.Where = "";
            GridView1.DataSource = userBll.loadData(user);
            GridView1.DataBind();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState["count"] = 1;
                loadData();
                Label1.Text  = "当前页:" + count;
                Label2.Text = "总页数:" + userBll.Count();
            }
        }
        protected void btnFirst_Click(object sender, EventArgs e)
        {
            ViewState["count"] = 1;
            loadData();
            Label1.Text  = "当前页:" + count;
            Label2.Text = "总页数:" + userBll.Count();
        }
        protected void btnPre_Click(object sender, EventArgs e)
        {
            if (Convert.ToInt32(ViewState["count"]) > 1)
            {
                ViewState["count"] = Convert.ToInt32(ViewState["count"]) - 1;
                loadData();
                Label1.Text = "当前页:" + count;
            }
        }
        protected void btnNext_Click(object sender, EventArgs e)
        {
            if (Convert.ToInt32(ViewState["count"]) < userBll.Count())
            {
                ViewState["count"] = Convert.ToInt32(ViewState["count"]) + 1;
                loadData();
                Label1.Text = "当前页:" + count;
            }
        }
        protected void btnLast_Click(object sender, EventArgs e)
        {
            ViewState["count"] = userBll.Count();
            loadData();
            Label1.Text = "当前页:" + count;
        }
        protected void btnGO_Click(object sender, EventArgs e)
        {
            try
            {
                ViewState["count"] = Convert.ToInt32(TextBox1.Text);
            }
            catch
            {
                return;
            }
            if (Convert.ToInt32(ViewState["count"]) <= userBll.Count())
            {
                loadData();
                Label1.Text = "当前页:" + count;
            }
            else
            {
                ClientScript.RegisterStartupScript(this.GetType(), "", "alert('超出范围');", true);
            }
        }
        protected void btnOK_Click(object sender, EventArgs e)
        {
            ViewState["count"] = 1;
            loadData();
            Label1.Text = "当前页:" + count;
            Label2.Text = "总页数:" + userBll.Count();
        }
    }
}
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace Webapp.DBHelper
{
    class SQLHelper
    {
        private string connStr = null;
        private SqlConnection conn = null;
        private SqlTransaction trans = null;
        public SQLHelper()
        {
            connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            conn = new SqlConnection(connStr);
        }
        /// <summary>
        /// 打开数据库连接
        /// </summary>
        private void OpenDB()
        {
            try
            {
                if (conn != null && conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 关闭数据库连接
        /// </summary>
        private void CloseDB()
        {
            try
            {
                if (conn != null && conn.State != ConnectionState.Closed)
                {
                    conn.Close();
                }
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 执行带参非查询SQL命令
        /// </summary>
        /// <param name="cmdtxt">带参非查询SQL命令</param>
        /// <param name="parmas">参数对象数组</param>
        /// <returns>影响的行数</returns>
        private SqlCommand CreateSqlCommand(string sql, SqlParameter[] parmas = null, CommandType cmdType = CommandType.Text)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandType = cmdType;
            cmd.CommandText = sql;
            if (trans != null)
            {
                cmd.Transaction = trans;
            }
            if (parmas != null)
            {
                cmd.Parameters.AddRange(parmas);
            }
            return cmd;
        }
        /// <summary>
        /// 执行一般非查询SQL命令
        /// </summary>
        /// <param name="cmdtxt">非查询SQL命令</param>
        /// <returns>影响的行数</returns>
        public int ExecuteSqlNonQuery(string sql)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(sql);
            try
            {
                return cmd.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (trans == null)
                {
                    CloseDB();
                }
            }
        }
        /// <summary>
        /// 根据SQL指令返回第一行第一列结果
        /// </summary>
        /// <param name="sql">sql语句</param>
        /// <param name="parameters">cmd.Parameters.AddWithValue</param>
        /// <returns>返回第一行第一列结果</returns>
        public int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(sql, parameters);
            try
            {
                return cmd.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (trans == null)
                {
                    CloseDB();
                }
            }
        }
        /// <summary>
        /// 执行不带参非查询存储过程
        /// </summary>
        /// <param name="proctxt">带参非查询存储过程名</param>        
        /// <returns>影响的行数</returns>
        public int ExecuteProcNonQuery(string proc)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(proc, null, CommandType.StoredProcedure);
            try
            {
                return cmd.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (trans == null)
                {
                    CloseDB();
                }
            }
        }
        /// <summary>
        /// 执行带参非查询存储过程
        /// </summary>
        /// <param name="proctxt">带参非查询存储过程名</param>
        /// <param name="parmas">参数对象数组</param>
        /// <returns>影响的行数</returns>
        public int ExecuteProcNonQuery(string proc, params SqlParameter[] parameters)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(proc, parameters, CommandType.StoredProcedure);
            try
            {
                return cmd.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                if (trans == null)
                {
                    CloseDB();
                }
            }
        }
        /// <summary>
        /// 执行一般查询SQL命令,返回DataReader对象
        /// </summary>
        /// <param name="cmdtxt">一般查询SQL命令</param>
        /// <returns>返回DataReader对象</returns>
        public SqlDataReader ExecuteSqlReader(string sql)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(sql);
            try
            {
                return cmd.ExecuteReader();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 执行带参查询SQL命令,返回DataReader对象
        /// </summary>
        /// <param name="cmdtxt">带参非查询SQL命令</param>
        /// <param name="parmas">参数对象数组</param>
        /// <returns>返回DataReader对象</returns>
        public SqlDataReader ExecuteSqlReader(string sql, params SqlParameter[] parameters)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(sql, parameters);
            try
            {
                return cmd.ExecuteReader();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 执行不带参查询存储过程
        /// </summary>
        /// <param name="proctxt">不参查询存储过程名</param>        
        /// <returns>返回DataReader对象</returns>
        public SqlDataReader ExecuteProcReader(string proc)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(proc, null, CommandType.StoredProcedure);
            try
            {
                return cmd.ExecuteReader();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 执行带参查询存储过程,返回DataReader对象
        /// </summary>
        /// <param name="cmdtxt">带参查询存储过程</param>
        /// <param name="parmas">参数对象数组</param>
        /// <returns>返回DataReader对象</returns>
        public SqlDataReader ExecuteProcReader(string proc, params SqlParameter[] parameters)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(proc, parameters, CommandType.StoredProcedure);
            try
            {
                return cmd.ExecuteReader();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 执行普通汇总查询SQL命令,返回object对象
        /// </summary>
        /// <param name="cmdtxt">普通汇总查询SQL命令</param>
        /// <returns>汇总结果,object对象</returns>
        public object ExecuteScalar(string sql)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(sql);
            try
            {
                return cmd.ExecuteScalar();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                CloseDB();
            }
        }
        /// <summary>
        /// 执行带参汇总查询SQL命令,返回object对象
        /// </summary>
        /// <param name="cmdtxt">带参汇总查询SQL命令</param>
        /// <param name="parmas">参数对象数组</param>
        /// <returns>汇总结果,object对象</returns>  
        public object ExecuteScalar(string sql, params SqlParameter[] parameters)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(sql, parameters);
            try
            {
                return cmd.ExecuteScalar();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                CloseDB();
            }
        }
        /// <summary>
        /// 执行不带参汇总查询存储过程,返回object对象
        /// </summary>
        /// <param name="cmdtxt">存储过程名</param>       
        /// <returns>汇总结果,object对象</returns>        
        public object ExecuteProcScalar(string proc)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(proc, null, CommandType.StoredProcedure);
            try
            {
                return cmd.ExecuteScalar();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                CloseDB();
            }
        }
        /// <summary>
        /// 执行带参汇总查询存储过程,返回object对象
        /// </summary>
        /// <param name="cmdtxt">存储过程名</param>
        /// <param name="parmas">参数对象数组</param>
        /// <returns>汇总结果,object对象</returns>   
        public object ExecuteProcScalar(string proc, params SqlParameter[] parameters)
        {
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(proc, parameters, CommandType.StoredProcedure);
            try
            {
                return cmd.ExecuteScalar();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                CloseDB();
            }
        }
        /// <summary>
        /// 执行普通查询SQL命令,返回结果集DataTable
        /// </summary>
        /// <param name="cmdtxt">普通查询SQL命令</param>
        /// <returns>结果集DataTable</returns>
        public DataTable ExecuteTable(string sql)
        {
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = CreateSqlCommand(sql);
            DataTable dt = new DataTable();
            try
            {
                da.Fill(dt);
                return dt;
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 执行带参查询SQL命令,返回结果集DataTable
        /// </summary>
        /// <param name="cmdtxt">带参查询SQL命令</param>
        /// <param name="parmas">参数对象数组</param>
        /// <returns>结果集DataTable</returns>
        public DataTable ExecuteSqlTable(string sql, params SqlParameter[] parameters)
        {
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = CreateSqlCommand(sql, parameters);
            DataTable dt = new DataTable();
            try
            {
                da.Fill(dt);
                return dt;
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 执行不带参查询存储过程,返回结果集DataTable
        /// </summary>
        /// <param name="cmdtxt">存储过程名</param>        
        /// <returns>结果集DataTable</returns>
        public DataTable ExecuteProcTable(string proc)
        {
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = CreateSqlCommand(proc, null, CommandType.StoredProcedure);
            DataTable dt = new DataTable();
            try
            {
                da.Fill(dt);
                return dt;
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 执行带参查询存储过程,返回结果集DataTable
        /// </summary>
        /// <param name="cmdtxt">存储过程名</param>
        /// <param name="parmas">参数对象数组</param>
        /// <returns>结果集DataTable</returns>
        public DataTable ExecuteProcTable(string proc, params SqlParameter[] parameters)
        {
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = CreateSqlCommand(proc, parameters, CommandType.StoredProcedure);
            DataTable dt = new DataTable();
            try
            {
                da.Fill(dt);
                return dt;
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        public DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            //conn = new SqlConnection(connStr);
            OpenDB();
            SqlCommand cmd = CreateSqlCommand(sql, parameters);
            DataSet dataset = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(cmd);
            try
            {
                adapter.Fill(dataset);
                return dataset.Tables[0];
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 开始一个事务
        /// </summary>
        public void BeginSqlTranscation()
        {
            OpenDB();
            trans = conn.BeginTransaction();
        }

        /// <summary>
        /// 提交一个事务
        /// </summary>
        public void CommitSqlTranscation()
        {
            trans.Commit();
            CloseDB();
            trans = null;
        }

        /// <summary>
        /// 事务回滚
        /// </summary>
        public void RollBackSqlTranscation()
        {
            trans.Rollback();
            CloseDB();
            trans = null;
        }
    }
}
基于三层架构的酒店客房管理:增删改查与分页实现 在管理信息系统的开发中,三层架构是经典的分层设计思想,它将表示层、业务逻辑层与数据访问层分离,从而提高代码的可维护性与扩展性。通过数据访问层封装SQL操作,业务逻辑层处理校验与事务,表示层专注于交互展示。这种架构广泛应用于企业级Web应用,如酒店管理系统中的客房类型与客房信息管理模块。本文以ASP.NET和SQL Server为基础,详细讲解如何实现客房数据的增删改查、分页查询以及表格光棒效果等典型功能,并给出具体的代码示例与部署注意事项,帮助开发者快速掌握MIS系统的核心开发流程。 阅读详情

相关推荐

asp.net MVC+三层+分页控件详解

asp.net MVC+三层+分页控件,这个是本人亲自编写,里面有详细的代码编写截图,以及讲解全部过程,很详细

在ASP中调用存储过程的几种方法

在ASP中调用存储过程的几种方法1.       这也是最简单的方法,两个输入参数,无返回值: set connection = server.createobject("adodb.connection") connection.open someDSN Connection.Execute "procname varvalue1, varvalue2" 将所有对象清为nothing,释

月落星沉 891

asp.net 用存储过程实现分页(附代码)

asp.net 用存储过程实现分页(附代码)

ASP.NET SQL SERVER 三层架构 Ajax 分页

ASP.NET+三层架构+SqlServer Ajax无刷新分页 1.首先数据表如下(IT_ExamPaper); 2.确定查询内容(比如查询:ExamName,AddTime,ExamTimelimit),那么这里本人通过存储过程来查。 存储如下: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create proc

TimTiny的博客 1232

ASP中调用存储过程、语法、写法

ASP中调用存储过程、语法、写法 ASP中调用存储过程、语法、写法

asp.net(GridView)存储过程分页源码

asp.net分页,存储过程,gridview分页,datagrid分页

ASP与存储过程

ASP与存储过程    ASP与存储过程(Stored Procedures)的文章不少,但是我怀疑作者们是否真正实践过。我在初学时查阅过大量相关资料,发现其中提供的很多方法实际操作起来并不是那么回事。对于简单的应用,这些资料也许是有帮助的,但仅限于此,因为它们根本就是千篇一律,互相抄袭,稍微复杂点的应用,就全都语焉不详了。     现在,我基本上通过调用存储过程访问SQL Server,以下的文

Wind_Lam的专栏 1042

ASP.NET存储过程实现分页效果(三层架构)

本文实例为大家分享了ASP.NET存储过程实现分页的具体代码,供大家参考,具体内容如下 实现效果: 文本框内输入跳转的页数,点击GO会跳转到该页 首先在项目下加入BLL,DAL,DataAccess,MODEL类库 1、前台界面 <%@ Page Language=C# AutoEventWireup=true CodeBehind=原始刷新分页.aspx.cs Inherits=分页.原始刷新分页 %> <!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR

asp调用存储过程

1.调用存储过程的一般方法先假设在sql server中有一存储过程dt_users:CREATE PROCEDURE [dbo].[dt_users]ASselect * from usersreturnGO第一种方法是不利用command对象,直接用recordset对象set rs=server.createobject("adodb.recordset")sql="exec dt_user

feiyou的专栏 686

三层架构crud和分页及无刷新分页

三层架构crud和分页,此外源码中还包涵前端应用Ajax进行crud和分页

【SAM2系列】windows单GPU复现时的bug解决记录

windows运行sam2,就感觉在开一艘破破烂烂的船,每走一步报一个错,bug源源不断的冒出来😭😭😭😭😭。

weixin_43571113的博客 1317

三层架构+ajax分页实例,ASP.NET存储过程实现分页效果(三层架构)

本文实例为大家分享了ASP.NET存储过程实现分页的具体代码,供大家参考,具体内容如下实现效果:文本框内输入跳转的页数,点击GO会跳转到该页首先在项目下加入BLL,DAL,DataAccess,MODEL类库1、前台界面$(function () {$('#txtPageindex').focus(function () {$(this).val("");})})DataFormatString=...

weixin_35907460的博客 348

从仿真到实物:Realsense D435+ROS2焊接机械臂的视觉标定与数据验证指南

本文详细介绍了如何将Realsense D435相机与ROS2焊接机械臂从仿真环境迁移到实物部署的全过程。通过视觉标定、数据验证和焊接场景优化,确保系统在真实环境中精准可靠。重点讲解了硬件配置、驱动优化、数据一致性验证及焊接应用的特殊处理,为工业自动化开发者提供实用指南。

weixin_28701593的博客 406

net调用MYSQL存储过程实现分页_ASP.NET存储过程实现分页效果(三层架构)

本文实例为大家分享了ASP.NET存储过程实现分页的具体代码,供大家参考,具体内容如下实现效果:文本框内输入跳转的页数,点击GO会跳转到该页首先在项目下加入BLL,DAL,DataAccess,MODEL类库1、前台界面$(function () {$('#txtPageindex').focus(function () {$(this).val("");})})DataFormatString=...

weixin_28873283的博客 162

从拆箱到跑通:Intel RealSense D435i开箱实测+ROS驱动配置全流程

本文详细记录了Intel RealSense D435i深度相机的开箱体验,并提供了在Ubuntu 22.04与ROS2 Humble环境下,从安装librealsense2 SDK到配置ROS2驱动的完整流程。重点解决了驱动安装、数据流发布、点云对齐以及IMU数据融合等关键步骤,帮助研究者和开发者快速实现D435i与机器人系统的集成。

weixin_29168393的博客 303

告别外置电阻!揭秘MAX22201集成电流检测的5大设计优势(附PCB布局案例)

本文深入解析MAX22201集成电流检测技术在直流有刷电机驱动中的5大设计优势,包括BOM成本降低、PCB空间优化、动态性能提升等。通过与传统方案(如DRV8871+外置电阻)的实测对比,展示其在高精度电流检测、抗干扰能力和PCB布局简化方面的突破,并附有详细的PCB布局案例和配置指南。

weixin_29189377的博客 242

分页存储过程(对有主键的表效率极高) ,以及在asp.net中配合LtpPageControl的用法

-----------------------------------用途:分页存储过程(对有主键的表效率极高)--说明:------------------------------------CREATEPROCEDUREUP_GetRecordByPage@tblNamevarchar(255),--表名@fld...

dianjiahan0904的博客 113

清理异常值(MAD:绝对中位差)

清理异常数据: 中位数绝对偏差(MAD):用来描述单变量样本在定量数据中可变的一种标准 在统计学中,绝对中位差是刻画一元数据样本变化的一个鲁棒度量。由公式可以看出,其求解还算简单,给定一个数据样本集,首先求其中位数,然后求原始数据减去中位数的绝对值从而形成一个新的数据样本,再求新的数据样本的中位数即为绝对中位差。比如说有一个数据样本集X={2 3 8 7 9 6 4},这时候数据的中位数是6,原...

spider_man 1万+

我的net分页方法(三层架构、适用于所有数据控件)

我是新手刚学net不久,这个是我在asp里面经常用的,速度还可,可以应付百万级的数据量,适用于任何复杂的SQL语句,现在把它转成net三层架构,我对net研究不多用的不多,不知道这样效率怎么样,贴出来让大家看看这样做行不行? 所使用的存储过程 Code CREATEPROCEDUREPage @iPageint=1,--当前页码 @iPageSizeint=10...

weixin_33726318的博客 99

AI驱动的数据完整性:ECC到S/4HANA迁移

在SAP ECC到S/4HANA的迁移过程中,数据完整性验证是最复杂且关键的挑战之一。本文介绍了一个全面的AI驱动的端到端数据完整性框架,用于对账事务数据并验证数百万条主数据记录和事务记录的完整性。该框架结合了模式映射、自然语言提示到SQL生成、基于LLM的解决方案、大规模数据对账的数据完整性工具、基于云的测试数据管理以及实时Power BI仪表板,为开发者提供了一个可重复、可扩展的工作流程,确保ERP迁移过程中的数据质量。

简简单单Onlinezuozuo 1172

六轴机器人正解

采用的是John H.Craig在【机器人学导论】中的改进DH模型 1.六轴坐标系 2.DH参数 i αi−1\alpha_{i-1}αi−1​ ai−1a_{i-1}ai−1​ did_idi​ θi\theta_iθi​初值 1 0 0 0 0 2 -90 a1a_1a1​ 0 -90 3 0 a2a_2a2​ 0 -90 4 -90 a3a_3a3​ d4d...

m0_37581770的博客 2511

求好用的.net 分页类

还要封装多麻烦 还是用GV控件自带的分页吧|||这个数据得用存储过程的类搞不到最好的的|||我的分页是PROC+控件的 count); return result; } 2 控件的话就很好做了 1 独立的类/// /// 对泛型列表的数据进行分页 /// /// 列表的类型 /// 原始数据 /// 每页尺寸 /// 页码 在MSDN上看看 表示当前共有多少

555

从0到1打造工业级上位机:通信协议到架构设计的实战全流程

作为一名在工控领域摸爬滚打十余年的开发者,前阵子刚帮一家新能源工厂完成了一套工业上位机系统的从0到1搭建。从最初和PLC通信联调时的“连不上、传错数”,到最终系统7×24小时稳定运行,踩过的坑、攒下的实战经验,今天就毫无保留地拆解给各位同行。这篇文章会从通信层、数据层、UI层到架构层逐层深入,全是工业现场验证过的干货,新手也能跟着落地。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 658

【利用存储过程和三层架构完成新闻发布】

1,本实例是新闻发布系统,采用三层架构,执行操作全部使用存储过程,实现添加新闻,删除新闻,查看新闻,修改新闻。并且最后用存储过程实现分页公共。本实例在vs2010中能够完整运行,以下是具体实现: 2 数据设计和存储过程的实现 数据库内容: 数据库设计和已创建的存储过程: 具体存储过程: 1添加新闻信息存储过程: View Code 1 USE [Blogs] ...

weixin_30622107的博客 94

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【ASP.NET开发】.NET三层架构简单解析

这篇文章本来应该很早就写出来的,但是一直苦于自己的精神能力有限,而且已经到了我们学校的考试周,所以时间上还是有点紧迫。关键的一点就是,找不到合理的思路来写,思路没有的话,就算是再好的素材,也写不来大家喜欢的文章。 之前已经写过关于.NET三层架的两篇文章了,一篇是《【ASP.NET开发】ASP.NET(MVC)三层架构知识的学习总结》和《【ASP.NET开发】ASP.NET对SQLServer的

强子的专栏 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: 情商高的人肯定具备的 5 个特征| 那些简浅给过的建议
下一篇: Vue(一)【基础知识】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值