C#SQL SERVER分页

这段代码展示了如何使用C#进行SQL分页查询,同时处理输入参数和输出参数,计算总记录数,并通过SqlDataAdapter填充DataSet。核心部分是利用ROW_NUMBER()函数实现分页,以及设置参数值为DBNull.Value来避免空值错误。
摘要由CSDN通过智能技术生成
public static DataSet GetPageList(string selectCommandText, List<SqlParameter> paramList, int pageSize, int pageIndex, string filedOrder, out string recordTotal)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        try
        {
            StringBuilder SQLString = new StringBuilder();
            SQLString.Append(@"
            BEGIN
                DECLARE @beginRow INT;
                DECLARE @endRow INT;

                SET NOCOUNT ON

                SET @beginRow = (@pageIndex - 1) * @pageSize + 1;
                SET @endRow = @pageIndex * @pageSize;

                --输出参数为总记录数
                SELECT @recordTotal = COUNT(1) FROM ("+ @selectCommandText + @") AS my_temp;

                --主查询返回结果集
                SELECT * FROM (SELECT ROW_NUMBER() OVER (order by @orderString) AS rows ,* FROM (" + @selectCommandText + @") AS A) AS main_temp 
                WHERE rows BETWEEN CAST(@beginRow AS VARCHAR) AND CAST(@endRow AS VARCHAR);
                SET NOCOUNT OFF
            END");
            connection.Open();
            SqlCommand cmd = new SqlCommand(SQLString.ToString(), connection);
            if (paramList != null && paramList.Count > 0)
            {
                foreach (SqlParameter param in paramList)
                {
                    if ((param.Direction == ParameterDirection.InputOutput || param.Direction == ParameterDirection.Input) &&
                    (param.Value == null))
                    {
                        param.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(param);
                }
            }
            recordTotal = "0";
            cmd.Parameters.Add(new SqlParameter("@recordTotal", SqlDbType.Int, 8) { Value = int.Parse(recordTotal), Direction = ParameterDirection.Output });
            cmd.Parameters.Add(new SqlParameter("@pageSize", SqlDbType.Int, 8) { Value = pageSize });
            cmd.Parameters.Add(new SqlParameter("@pageIndex", SqlDbType.Int, 8) { Value = pageIndex });
            cmd.Parameters.Add(new SqlParameter("@orderString", SqlDbType.VarChar, 1000) { Value = filedOrder });
            SqlDataAdapter sqlDA = new SqlDataAdapter();
            sqlDA.SelectCommand = cmd;
            DataSet ds = new DataSet();
            sqlDA.Fill(ds);
            recordTotal = cmd.Parameters["@recordTotal"].Value != DBNull.Value ? cmd.Parameters["@recordTotal"].Value.ToString() : "0";
            connection.Close();
            cmd.Parameters.Clear();
            return ds;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿够钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值