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

Sql Server数据库万能分页存储过程与C# API控制器调用

程序员文章站 2022-06-24 23:09:15
Sql Server数据库万能分页存储过程与C# API控制器调用打开数据库创建存储过程(表名、字段名、排序字段可以去掉,直接写死)CREATE PROCEDURE [dbo].[UserInfo_PAGE]@TableName VARCHAR(50), --表名@ReFieldsStr VARCHAR(200) = ‘’, --字段名(全部字段为)@OrderString VARCHAR(200), --排序字段(必须!支持多字段不用加order by)...

Sql Server数据库万能分页存储过程与C# API控制器调用

打开数据库创建存储过程(表名、字段名、排序字段可以去掉,直接写死)
CREATE PROCEDURE [dbo].[UserInfo_PAGE]
@TableName VARCHAR(50), --表名
@ReFieldsStr VARCHAR(200) = ‘’, --字段名(全部字段为)
@OrderString VARCHAR(200), --排序字段(必须!支持多字段不用加order by)
@WhereString VARCHAR(500) =N’’, --条件语句(不用加where)
@PageSize INT, --每页多少条记录
@PageIndex INT = 1 , --指定当前为第几页
@TotalRecord INT OUTPUT --返回总记录数
AS
BEGIN
–处理开始点和结束点
DECLARE @StartRecord INT;
DECLARE @EndRecord INT;
DECLARE @TotalCountSql NVARCHAR(500);
DECLARE @SqlString NVARCHAR(2000);
SET @StartRecord = (@PageIndex-1)@PageSize + 1–起始记录
SET @EndRecord = @StartRecord + @PageSize - 1 --结尾记录
SET @TotalCountSql= N’select @TotalRecord = count(
) from ’ + @TableName;–总记录数语句
SET @SqlString = N’(select row_number() over (order by ‘+ @OrderString +’) as rowId,’+@ReFieldsStr+’ from '+ @TableName;–查询语句

IF (@WhereString! = ‘’ or @WhereString!=null)
BEGIN
SET @TotalCountSql=@TotalCountSql + ’ where ‘+ @WhereString;
SET @SqlString =@SqlString+ ’ where ‘+ @WhereString;
END
–第一次执行得到
EXEC sp_executesql @totalCountSql,N’@TotalRecord int out’,@TotalRecord OUTPUT;–返回总记录数
----执行主语句
SET @SqlString ='select * from ’ + @SqlString + ') as t where rowId between ’ + ltrim(str(@StartRecord)) + ’ and ’ + ltrim(str(@EndRecord));
Exec(@SqlString)
END

API控制器

    private static readonly string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["con"].ToString();//字符串连接数据库
    [Route("api/PageShow")]
    [HttpGet]
    public IHttpActionResult getPagedList(int pageSize=3,int pageIndex=1,string WhereString="",)
    {
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand("UserInfo_PAGE", conn); //创建command对象
        cmd.CommandType = CommandType.StoredProcedure; //设置command 对象的type属性
        SqlParameter[] parameters = new SqlParameter[] {
            new SqlParameter{ParameterName="@PageSize",SqlDbType=SqlDbType.Int,Value=pageSize},
            new SqlParameter{ParameterName="@PageIndex",SqlDbType=SqlDbType.Int,Value=pageIndex},
            new SqlParameter{ParameterName="@WhereString",SqlDbType=SqlDbType.NVarChar,Value=WhereString},
            new SqlParameter{ParameterName="@TotalRecord",SqlDbType=SqlDbType.Int,Direction=ParameterDirection.Output},
        };
        cmd.Parameters.AddRange(parameters);
        SqlDataAdapter sda = new SqlDataAdapter(cmd);//用SqlDataReader 对象回去数据,不用担心conn断开的问题
        DataTable dt = new DataTable();        
        sda.Fill(dt); //获取存储过程返回的数据集
        string json = JsonConvert.SerializeObject(dt);
        List<InvestmentModel> list = JsonConvert.DeserializeObject<List<InvestmentModel>>(json);
        int count=Convert.ToInt32(parameters[3].Value);
        return Ok(new {list,count });
    }

本文地址:https://blog.csdn.net/hgfuyi/article/details/107313617