使用Dapper接收多個結果集,並實現預存程序分頁

來源:互聯網
上載者:User

轉載請註明出處
http://blog.csdn.net/weijian300/article/details/50463307
本文簡單介紹一下QueryMultiple的用法,並給出用QueryMultiple來實現SQL Server預存程序分頁
先放一個網上找的分頁過程,出自哪裡不記得了,原文作者別見怪

--分頁預存程序  CREATE PROCEDURE [dbo].[Pro_System_DataPaging]    (      @Tables VARCHAR(1000) ,                --表名/視圖名      @PrimaryKey VARCHAR(100) ,             --主鍵      @Sort VARCHAR(200) = NULL ,            --排序欄位(不帶order by)      @pageindex INT = 1 ,                    --當前頁碼      @PageSize INT = 10 ,                    --每頁記錄數      @Fields VARCHAR(1000) = N'*' ,         --輸出欄位      @Filter VARCHAR(8000) = NULL ,         --where過濾條件(不帶where)      @Group VARCHAR(1000) = NULL --,          --Group語句(不帶Group By)      --@DataCount INT OUTPUT                 --總記錄數    )AS     DECLARE @SortTable VARCHAR(100)     DECLARE @SortName VARCHAR(100)     DECLARE @strSortColumn VARCHAR(200)     DECLARE @operator CHAR(2)     DECLARE @type VARCHAR(100)     DECLARE @prec INT --設定排序語句    IF @Sort IS NULL        OR @Sort = ''         SET @Sort = @PrimaryKey          IF CHARINDEX('DESC', @Sort) > 0         BEGIN                     SET @strSortColumn = REPLACE(@Sort, 'DESC', '')                     SET @operator = '<='             END     ELSE         BEGIN                            SET @strSortColumn = REPLACE(@Sort, 'ASC', '')                            SET @operator = '>='             END     IF CHARINDEX('.', @strSortColumn) > 0         BEGIN                     SET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX('.', @strSortColumn))            SET @SortName = SUBSTRING(@strSortColumn, CHARINDEX('.', @strSortColumn) + 1, LEN(@strSortColumn))             END     ELSE         BEGIN                     SET @SortTable = @Tables                     SET @SortName = @strSortColumn          END --設定排序欄位類型和精度     SELECT  @type = t.name ,            @prec = c.prec    FROM    sysobjects o            JOIN syscolumns c ON o.id = c.id            JOIN systypes t ON c.xusertype = t.xusertype    WHERE   o.name = @SortTable            AND c.name = @SortName    IF CHARINDEX('char', @type) > 0         SET @type = @type + '(' + CAST(@prec AS VARCHAR) + ')'    DECLARE @strPageSize VARCHAR(50)     DECLARE @strStartRow VARCHAR(50)     DECLARE @strFilter VARCHAR(1000)     DECLARE @strSimpleFilter VARCHAR(1000)     DECLARE @strGroup VARCHAR(1000)      IF @pageindex < 1         SET @pageindex = 1      SET @strPageSize = CAST(@PageSize AS VARCHAR(50)) --設定開始分頁記錄數     SET @strStartRow = CAST(( ( @pageindex - 1 ) * @PageSize + 1 ) AS VARCHAR(50))  --篩選以及分組語句    IF @Filter IS NOT NULL        AND @Filter != ''         BEGIN                     SET @strFilter = ' WHERE ' + @Filter + ' '             SET @strSimpleFilter = ' AND ' + @Filter + ' '         END     ELSE         BEGIN                     SET @strSimpleFilter = ''                     SET @strFilter = ''             END     IF @Group IS NOT NULL        AND @Group != ''         SET @strGroup = ' GROUP BY ' --執行查詢語句        EXEC(    '    DECLARE @SortColumn ' + @type + '    SET ROWCOUNT ' + @strStartRow + '    SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '    SET ROWCOUNT ' + @strPageSize + '    SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '    '    )       --計算總記錄數,總頁數    DECLARE @DataCountSql NVARCHAR(1000)    SET @DataCountSql = N'SELECT COUNT(' + @PrimaryKey + N') AS DataCount,CEILING(COUNT(' + @PrimaryKey + N')/' + CONVERT(VARCHAR(10),@PageSize) + '.000) AS PageCount'+ N' FROM ' + @Tables + @strFilter    --EXEC sp_executesql @DataCountSql, N'@DataCount int', @DataCount OUTPUT    EXEC(@DataCountSql)

表

CREATE TABLE [dbo].[TestColumn](    [Id] [int] IDENTITY(1,1) NOT NULL,    [NAME] [nvarchar](150) NULL,    [ModifiedOn] [smalldatetime] NULL    )

OK,接下來建立個控制台項目

        private const string Sqlconnection = @"Data Source=.\MSSQLSERVER2008;Initial Catalog=DapperTest;User Id=sa;Password=123456;";//串連自己改        public static SqlConnection OpenConnection()        {            var connection = new SqlConnection(Sqlconnection);            connection.Open();            return connection;        }        /// <summary>        /// 單個結果集        /// </summary>        /// <returns>查詢結果</returns>        public static IEnumerable<TestColumn> SelectTestColumns()        {            using (IDbConnection conn = OpenConnection())            {                const string query = "select * from TestColumn order by id desc";                return conn.Query<TestColumn>(query, null);            }        }        /// <summary>        /// 多個結果集        /// </summary>        /// <param name="sysPaging">分頁資訊</param>        /// <returns>查詢結果</returns>        public static IEnumerable<TestColumn> SelectTestColumns(out List<SysPaging> sysPaging)        {            using (IDbConnection conn = OpenConnection())            {                const string query = "EXEC [dbo].[Pro_System_DataPaging] @Tables = N'TestColumn',@PrimaryKey = N'ID',@Sort = N'ID',@pageindex = 1,@PageSize = 10,@Fields = '[Id],[NAME],[ModifiedOn]',@Filter = NULL,@Group = NULL";                var result = conn.QueryMultiple(query);                //這裡一定要分別單獨接收之後,再進行return                var resultGird = result.Read<TestColumn>().ToList();                var paging = result.Read<SysPaging>().ToList();                sysPaging = paging.ToList<SysPaging>();                return resultGird;            }        }        static void Main(string[] args)        {            var paging = new List<SysPaging>();            var allTestColumns = SelectTestColumns(out paging).ToList<TestColumn>();            foreach (var testColumn in allTestColumns.Where(c => c.Parentid == 0))            {                Console.Out.WriteLine("Id==>" + testColumn.Id + "\t");                Console.Out.WriteLine("Name==>" + testColumn.Name + "\t");                Console.Out.WriteLine("時間==>" + testColumn.ModifiedOn + "\t");            }            Console.Out.WriteLine("DataCount==>" + paging[0].DataCount);            Console.Out.WriteLine("PageCount==>" + paging[0].PageCount);            Console.ReadLine();        }

其實在Dapper中也有介紹QueryMultiple的用法
官網:http://code.google.com/p/dapper-dot-net/
GitHub:https://github.com/StackExchange/dapper-dot-net

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.