簡體   English   中英

使用 Dapper.NET 在一次往返中執行多個 SQL 語句

[英]Multiple SQL statements in one roundtrip using Dapper.NET

ADO.NET 中有一個很好的功能,它允許您在一次往返中將多個 SQL 語句發送到數據庫並接收所有語句的結果:

var command = new SqlCommand("SELECT count(*) FROM TableA; SELECT count(*) FROM TableB;", connection);

using(var reader = command.ExecuteReader())
{
    reader.Read();
    resultA = reader.GetInt32(0);
    reader.NextResult();
    reader.Read();
    resultB = reader.GetInt32(0);
}

Dapper.NET 中是否有類似的功能?

是的,Dapper QueryMultiple擴展可以做到這一點:

string query = @"SELECT COUNT(*) FROM TABLEA;
                 SELECT COUNT(*) FROM TABLEB";
using (var multi = connection.QueryMultiple(query, null))
{
    int countA = multi.Read<int>().Single();
    int countB = multi.Read<int>().Single();
}     

根據Marc Gravell 的說法,這是在單個批處理中執行多個查詢的理想方式。

注意:Dapper 創建者Sam Saffron發布了關於使用QueryMultiple完成此操作的代碼示例詳細說明

更新:我添加了 Marc 的重要評論

注意:從 1.5-ish(alpha 版本的早期版本)有一個 ReadSingle() 方法可能比 Read().Single() 更方便和有效

var grid = connection.QueryMultiple("
             SELECT COUNT(*) FROM TABLEA
             SELECT COUNT(*) FROM TABLEB
             SELECT COUNT(*) FROM TABLEC");
var lstResult = new List<int>();
var isNext = false;
do{
    var first2 = info.Read<int>().Single();
    lstResult.Add(first2);
    isNext=info.IsConsumed;
}
while (!isNext);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM