Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Dapper.NET在一次往返中使用多个SQL语句_C#_Sql_.net_Sql Server_Dapper - Fatal编程技术网

C# 使用Dapper.NET在一次往返中使用多个SQL语句

C# 使用Dapper.NET在一次往返中使用多个SQL语句,c#,sql,.net,sql-server,dapper,C#,Sql,.net,Sql Server,Dapper,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

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();
}     
stringquery=@“从表A中选择COUNT(*);
从表B中选择计数(*);
使用(var multi=connection.QueryMultiple(query,null))
{
int countA=multi.Read().Single();
int countB=multi.Read().Single();
}     
根据这一点,这是在一个批处理中执行多个查询的理想方式

注意:Dapper creator已经发布了一个关于使用
QueryMultiple
来完成此任务的帖子

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

注意:从1.5-ish(alpha版本稍早)开始,有一个 ReadSingle()方法,它可能比 Read().Single()

var grid=connection.QueryMultiple(“
从表A中选择计数(*)
从表B中选择计数(*)
从表C中选择计数(*);
var lstreult=新列表();
var isNext=false;
做{
var first2=info.Read().Single();
lstreult.Add(first2);
isNext=info.IsConsumed;
}
而(!isNext);

这里的内容是理想的注意:从1.5-ish(alpha版本稍早一点)开始,有一个
ReadSingle()
方法可能比
Read().Single()更方便、更有效。需要花一点时间来测试这些新版本。仍然是1.42。它是否适用于NET 4.0?@Shil这样可以减少应用程序服务器和数据库服务器之间的网络调用数量。所以总体响应时间会更好。在这里,我工作的地方,我们需要在一个给定的视图中至少6个结果集。因此,保存5个网络呼叫是非常好的这似乎是打破在最新版本。。。我正在寻找修复方法。谢谢!!我正在比较许多类似存储过程的结果。性能已调整,但未调整。过程可能返回多个结果集。我没能把它们都弄到手。我在任何示例中都没有看到IsConsumed标志。这就是为什么我不能迭代它们并收集它们。谢谢你的代码示例
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);