欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#基于数据库存储过程的AJAX分页实例

程序员文章站 2023-12-12 17:11:28
本文实例讲述了c#基于数据库存储过程的ajax分页实现方法。分享给大家供大家参考。具体如下: 首先我们在数据库(sql server)中声明定义存储过程 复制代码 代码...

本文实例讲述了c#基于数据库存储过程的ajax分页实现方法。分享给大家供大家参考。具体如下:

首先我们在数据库(sql server)中声明定义存储过程

复制代码 代码如下:
use sales    --指定数据库 
 
if(exists(select * from sys.objects where name='proc_location_paging')) --如果这个proc_location_paging存储过程存在则删除 
drop proc proc_location_paging 
go 
 
create proc proc_location_paging   --创建存储过程 

@pagesize int,  --页大小 
@currentpage int,  --当前页 
@rowcount int output,  --总行数(传出参数) 
@pagecount int output  --总页数(传出参数) 

as 
begin 
 
select @rowcount= count(locid) from location  --给@rowcount赋值 
 
select @pagecount= ceiling((count(locid)+0.0)/@pagesize) from location  --给@pagecount赋值 
 
select top (@pagesize)* from (select row_number() over(order by locid) as rowid,* from location) as t1 
where rowid >(@pagesize*(@currentpage-1)) 
 
end 
go 
---------------------------------以上就表示这个存储过程已经定义完了。 
 
---------------------------------以下是执行这个存储过程。我们可以看结果 
 
declare @rowcount int,@pagecount int  --先声明两个参数 
 
--执行proc_location_paging这个存储过程。@rowcount,@pagecount后面都有output 表示它们两是输出参数 
exec proc_location_paging 10,1,@rowcount output,@pagecount output   
 
select @rowcount,@pagecount  --查询这两个参数的值

因为是直接访问数据库的,所以我们将下面这条方法写入到dal层中,这里我将它写入到sqlhelper中

复制代码 代码如下:
using system; 
using system.collections.generic; 
using system.linq; 
using system.text; 
using system.configuration; 
using system.data.sqlclient; 
using system.data; 
using system.reflection; 
 
namespace llsql.dal 

    public class sqlhelper 
    { 
        /// <summary> 
        /// 获取连接数据库字符串 
        /// </summary> 
        private static string connstr = configurationmanager.connectionstrings["connstr"].connectionstring; 
        public static datatable executeprocpagelist(int pagesize, int currentpage, out int rowcount, out int pagecount) 
        { 
            using (sqlconnection conn = new sqlconnection(connstr)) 
            { 
                conn.open(); 
                using (sqlcommand cmd = conn.createcommand()) 
                { 
                    cmd.commandtext = "proc_location_paging"; //存储过程的名字 
                    cmd.commandtype = commandtype.storedprocedure; //设置命令为存储过程类型(即:指明我们执行的是一个存储过程)
                    rowcount = 0; 
                    pagecount = 0;//这里随便给rowcount,pagecount赋个值,因为使用out传递参数的时候,在方法内部一定要给out参数赋值才能用它,但是虽然这里给它赋初值了,但是在执行存储过程中,存储过程又会给这两个参数赋值,并返还回来给我们,那个才是我们要值 
                    sqlparameter[] parameters ={ 
                             new sqlparameter("@pagesize",pagesize), 
                             new sqlparameter("@currentpage",currentpage), 
                             new sqlparameter("@rowcount",rowcount), 
                             new sqlparameter("@pagecount",pagecount) 
                    }; 
                    //因为在存储过程中@rowcount 与@pagecount 是一个输出参数(output), 而parameters这个数组里,第三,和第四个参数就是要用来替换掉这两个输出参数的,所以这里要将parameters这个数组里的这两个参数设为输出参数。 
                    parameters[2].direction = parameterdirection.output;
                    parameters[3].direction = parameterdirection.output;
                    cmd.parameters.addrange(parameters); //将参数传递给我们的cmd命令对象 

                    datatable dt = new datatable(); 
                    using (sqldataadapter adapter = new sqldataadapter(cmd)) 
                    { 
                        adapter.fill(dt);//到数据库去执行存储过程,并将结果填充到dt表中 
                    } 
                    //等存储过程执行完毕后,存储过程会把这两个输出参数传递出来。那么我们在这里来取得这两个返回参数。 
                    rowcount = convert.toint32(parameters[2].value); 
                    pagecount = convert.toint32(parameters[3].value); 
                    return dt; 
                } 
            } 
        } 
    } 
}

在dal文件夹中( 层中) 创建一个aticel.cs类  产生一个list

复制代码 代码如下:
using system; 
using system.collections.generic; 
using system.linq; 
using system.web; 
using system.data; 
using llsql.dal; 
using webapplication1.model; 

namespace webapplication1.dal 

    public class aticel 
    { 
        public static list<location> getpagelistbypageindex(int pagesize,int currentpage,out int rowcount,out int pagecount) 
        { 
            datatable dt= sqlhelper.executeprocpagelist(pagesize, currentpage,out rowcount,out pagecount); 
            var list = new list<location>();// 声明一个泛型对象list 
            if (dt != null && dt.rows.count > 0) 
            { 
                //将datatable转换成一个list 
                list = (from p in dt.asenumerable()  //(遍历datatable)
                        select new model.location 
                        { 
                            locid = p.field<int>("locid"),   //将datetable里的字段赋值给location类中的属性 
                            locname = p.field<string>("locname"), 
                            parentid = p.field<int>("parentid"), 
                            loctype = p.field<short>("loctype"), 
                            elongcode = p.field<string>("elongcode"), 
                            citycode = p.field<string>("citycode"), 
                            baidupos = p.field<string>("baidupos"), 
                            versions = p.field<short>("version") 
                        }).tolist();  
            } 
            return list; //将这个list返回回去 
        } 
    } 
}

在api这个文件夹中创建一个getpagedata.ashx 页 (bll层) 在这里调用adl层里的 aticel.cs类中的getpagelistbypageindex()方法,获取一个list  并将这个list转换成一个json格式字符串, 共ajax 异步请求得到。

复制代码 代码如下:
using system; 
using system.collections.generic; 
using system.linq; 
using system.web; 
using system.web.script.serialization; 
 
namespace webapplication1.api 

    /// <summary> 
    /// getpagedata 的摘要说明 
    /// </summary> 
    public class getpagedata : ihttphandler 
    { 
        /// <summary> 
        /// 根据用户传递的当前页的页码来获取数据 
        /// </summary> 
        /// <param name="context"></param> 
        public void processrequest(httpcontext context) 
        { 
            context.response.contenttype = "text/plain"; 
            int pagesize = 10; //设定页大小,每页显示10条数据 
            int currentpage = convert.toint32(context.request.querystring["currentpage"]); //设定当前页 
            int rowcount = 0;  //作为out参数传递给方法,在方法里给rowcount赋值 
            int pagecount = 0; //作为out参数传递给方法,在方法里给rowcount赋值 
            string jsondata = null;  
            list<model.location> list= dal.aticel.getpagelistbypageindex(pagesize, currentpage, out rowcount, out pagecount); 
            if (list != null && list.count > 0) 
            { 
                //创建json序列化器,将对象转换成一个json格式的字符串 
                javascriptserializer jsz = new javascriptserializer(); 
                jsondata = jsz.serialize(list); //将一个list对象转换成json格式的字符串 
                context.response.write(jsondata); 
            } 
            else 
            { 
                context.response.write("no"); 
            } 
        } 
        public bool isreusable 
        { 
            get 
            { 
                return false; 
            } 
        } 
    } 
}

前端页面  (将ajax请求得到的数据展示也页面)

复制代码 代码如下:
<%@ page language="c#" autoeventwireup="true" codebehind="webform1.aspx.cs" inherits="webapplication1.webform1" %> 
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>使用ajax分页</title> 
    <script src="jquery-1.11.2.js" type="text/javascript"></script> 
    <style type="text/css"> 
      table{ margin:80px 500px; } 
      td{ width:50px; height:auto} 
    </style> 
    <script type="text/javascript"> 
        $(function () { 
            $.get("api/getpagedata.ashx?currentpage=2", function (obj) { //假设当前页是第二页currentpage=2 
                //debugger; 
 
                var jsondata = $.parsejson(obj); 
                //alert(jsondata[0].locid); 
                //debugger; 
                for (var i = 0; i < jsondata.length; i++) { 
                    var data = "<tr><td >" + jsondata[i].locid + "</td><td >" + jsondata[i].locname + "</td><td >" + jsondata[i].parentid + "</td><td >" + jsondata[i].loctype + "</td><td >" + jsondata[i].elongcode + "</td><td >" + jsondata[i].citycode + "</td><td >" + jsondata[i].baidupos + "</td><td >" + jsondata[i].versions + "</td></tr>"; 
                    $("#t1").append(data); 
                } 
            }) 
        }) 
    </script> 
</head> 
<body> 
 <table border="1" cellpadding="5" cellspacing="0" style="margin-top:100px;width:600px;" id="t1"> 
    <tr><td>编号</td><td >城市名</td><td >父id</td><td >loctype</td><td >elongcode</td><td >citycode</td><td >baidupos</td><td >version</td></tr> 
 </table> 
 </body> 
</html>

希望本文所述对大家的c#程序设计有所帮助。

上一篇:

下一篇: