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

前端技术 2023/09/05 C#

本文实例讲述了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; 
                } 
            } 
        } 
    } 
}

本文地址:https://www.stayed.cn/item/13799

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。