首頁 > 軟體

輕量級ORM框架Dapper應用之返回多個結果集

2022-03-05 19:00:04

使用Dapper的QueryMultiple方法可以一次執行多條SQL語句,返回多個結果集,程式碼如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using Dapper;
using System.Data;
using System.Data.SqlClient;
using DapperAppQueryMultiple.Model;

namespace DapperAppQueryMultiple
{
    class Program
    {
        static void Main(string[] args)
        {
            // 定義連線字串
            string conn = ConfigurationManager.ConnectionStrings["AppConnection"].ConnectionString;
            using (IDbConnection connection = new SqlConnection(conn))
            {
                var sql = @"SELECT * FROM Users WHERE UserId=@UserId;
                            SELECT * FROM Product WHERE ProductId=@ProductId";
                var queryMulti = connection.QueryMultiple(sql, new { UserId = 1, ProductId=3 });

                // 注意:Read獲取的時候必須是按照上面返回表的順序 比如上面先查詢的Users表,那麼Read的時候必須先返回Users表,否則返回沒有資料
                var users = queryMulti.Read<User>();
                var products = queryMulti.Read<Product>();
                Console.WriteLine("*****產品資訊*****");
                // 迴圈遍歷輸出
                products.AsList<Product>().ForEach(p =>
                {
                    Console.WriteLine("產品名稱:"+p.ProductName+" 價格:"+p.Price);
                });
                Console.WriteLine("*****產品資訊*****");

                Console.WriteLine("*****使用者資訊*****");
                users.AsList<User>().ForEach(p => {
                    Console.WriteLine("使用者姓名:"+p.UserName+" 郵箱:"+p.Email+" 地址:"+p.Address);
                });
                Console.WriteLine("*****使用者資訊*****");
            }


            Console.ReadKey();

        }
    }
}

程式執行結果:

注意:Read獲取的時候必須是按照上面返回表的順序 比如上面先查詢的Users表,那麼Read的時候必須先返回Users表,否則返回沒有資料。Read<T>裡面的T泛型類不一定要和資料庫表名相同,上面程式碼的T泛型類是User,資料庫表名是Users。

下面的程式碼演示返回順序不同:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using Dapper;
using System.Data;
using System.Data.SqlClient;
using DapperAppQueryMultiple.Model;

namespace DapperAppQueryMultiple
{
    class Program
    {
        static void Main(string[] args)
        {
            // 定義連線字串
            string conn = ConfigurationManager.ConnectionStrings["AppConnection"].ConnectionString;
            using (IDbConnection connection = new SqlConnection(conn))
            {
                var sql = @"SELECT * FROM Users WHERE UserId=@UserId;
                            SELECT * FROM Product WHERE ProductId=@ProductId";
                var queryMulti = connection.QueryMultiple(sql, new { UserId = 1, ProductId=3 });

                // 先返回Product表的查詢資料
                var products = queryMulti.Read<Product>();
                var users = queryMulti.Read<User>();

                Console.WriteLine("*****產品資訊*****");
                // 迴圈遍歷輸出
                products.AsList<Product>().ForEach(p =>
                {
                    Console.WriteLine("產品名稱:"+p.ProductName+" 價格:"+p.Price);
                });
                Console.WriteLine("*****產品資訊*****");

                Console.WriteLine("*****使用者資訊*****");
                users.AsList<User>().ForEach(p => {
                    Console.WriteLine("使用者姓名:"+p.UserName+" 郵箱:"+p.Email+" 地址:"+p.Address);
                });
                Console.WriteLine("*****使用者資訊*****");
            }


            Console.ReadKey();

        }
    }
}

上面的程式碼只是修改了返回表的資料,程式執行結果如下:

範例程式碼下載地址:點此下載

到此這篇關於使用Dapper返回多個結果集的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com