【问题标题】:Multiple SQL statements in one roundtrip using Dapper.NET使用 Dapper.NET 在一次往返中执行多个 SQL 语句
【发布时间】:2013-10-20 16:11:35
【问题描述】:

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

【问题讨论】:

    标签: c# sql .net sql-server dapper


    【解决方案1】:

    是的,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 已发布了 detailed explanation with code sample 使用 QueryMultiple 来完成此操作。

    更新:我添加了 Marc 的重要评论

    注意:从 1.5-ish(在 alpha 版本上稍早一点)有一个 ReadSingle() 方法可能比 读().Single()

    【讨论】:

    • 这里的东西很理想
    • 注意:从 1.5-ish 开始(在 alpha 版本上稍早一些),有一个 ReadSingle&lt;T&gt;() 方法可能比 Read&lt;T&gt;().Single() 更方便和高效
    • 有趣。需要花点时间来测试这些新版本。还在1.42。它适用于 NET 4.0 吗?
    • @Shil 这样可以减少应用程序服务器和数据库服务器之间的网络调用次数。所以整体响应时间会更好。在这里,我在给定视图中需要至少 6 个结果集的地方工作。所以节省5个网络调用就很好了
    • 这似乎在最新版本中被破坏了......我正在寻找修复。
    【解决方案2】:
    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);
    

    【讨论】:

    • 谢谢!!我正在比较许多类似存储过程的结果。性能调整和不。 procs 可能会返回多个结果集。我无法得到所有这些。我在任何示例中都没有看到 IsConsumed 标志。这就是为什么我无法遍历它们并收集它们。感谢代码示例
    猜你喜欢
    • 2011-01-21
    • 2019-03-25
    • 2023-04-01
    • 2012-06-09
    • 1970-01-01
    • 2017-07-11
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多