当前位置: 移动技术网 > IT编程>开发语言>.net > Sql Server数据库万能分页存储过程与C# API控制器调用

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

2020年07月14日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网