57

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 中是否有类似的功能?

4

2 回答 2

97

是的,DapperQueryMultiple扩展可以做到这一点:

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() 更方便和高效

于 2013-10-12T18:14:17.167 回答
5
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);
于 2017-06-20T08:58:29.577 回答