C# 在dapper中调用多个查询后读取失败

C# 在dapper中调用多个查询后读取失败,c#,generics,dapper,C#,Generics,Dapper,我在Helper类中使用了以下方法,并将其与Dapper一起使用: Helper.cs: public SqlMapper.GridReader MQueries(string spName, object dynamicParams) { using (IDbConnection conn = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"])) { conn.Open(); retu

我在
Helper
类中使用了以下方法,并将其与Dapper一起使用:

Helper.cs:

public SqlMapper.GridReader MQueries(string spName, object dynamicParams)
{
  using (IDbConnection conn = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"]))
  {
    conn.Open();

    return conn.QueryMultiple(spName, dynamicParams, commandType: CommandType.StoredProcedure);
  }
}
public Member GetMemberDetails(Member member)
{
  var multi = Helper.MQueries("GetMemberDetails", member);
  var member = multi.Read<Member>().Single();
  var memberStatus = multi.Read<MemberStatus>().Single();
  var memberContact = multi.Read<MemberContact>().ToList();
  var memberFinancial = multi.Read<MemberFinancial>().ToList();

  member.MemberStatus = memberStatus;
  member.MemberContact = memberContact;
  member.MemberFinancial = memberFinancial;

  return member;
}
我从另一个名为
DataAccess
的类调用上述方法:

DataAccess.cs:

public SqlMapper.GridReader MQueries(string spName, object dynamicParams)
{
  using (IDbConnection conn = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"]))
  {
    conn.Open();

    return conn.QueryMultiple(spName, dynamicParams, commandType: CommandType.StoredProcedure);
  }
}
public Member GetMemberDetails(Member member)
{
  var multi = Helper.MQueries("GetMemberDetails", member);
  var member = multi.Read<Member>().Single();
  var memberStatus = multi.Read<MemberStatus>().Single();
  var memberContact = multi.Read<MemberContact>().ToList();
  var memberFinancial = multi.Read<MemberFinancial>().ToList();

  member.MemberStatus = memberStatus;
  member.MemberContact = memberContact;
  member.MemberFinancial = memberFinancial;

  return member;
}
公共成员GetMemberDetails(成员)
{
var multi=Helper.mquerys(“GetMemberDetails”,成员);
var member=multi.Read().Single();
var memberStatus=multi.Read().Single();
var memberContact=multi.Read().ToList();
var memberFinancial=multi.Read().ToList();
member.MemberStatus=MemberStatus;
member.MemberContact=MemberContact;
member.MemberFinancial=MemberFinancial;
返回成员;
}
然而,
多变量
有数据,但一旦我想将其分离并映射到另一个变量,我得到了一个异常,称为
无法读取,而读卡器关闭

我知道这是因为我使用了
using语句
,所以在
多变量
之后,连接会自动关闭,因此我无法读取任何内容

我怎样才能解决这个问题

非常感谢你的回答


谢谢

在您尝试阅读之前,连接已关闭。那不行

我建议这样做:

using (var connection = new SqlConnection(ConfigurationManager.AppSettings["MyConnection"]))
using (var result = connection.QueryMultiple("GetMemberDetails", commandType: CommandType.StoredProcedure))
{
    //... Consume
}

您好,如果我确实喜欢您在
Helper
类中提到的那一个,我怎样才能同时获得
阅读
?当我尝试读取
时,我会再次遇到相同的错误,不是吗?ThanksI提到了DataAccess类中要使用的代码,明白了。谢谢,让我检查一下是否有其他方法来实现这一点,而不是dataaccess类中的连接和查询。您能否尝试返回DataSet或IEnumerable而不是SqlMapper.GridReader?我已经从其他人那里找到了一个解决方案。。即使这对我来说还不是一个最好的解决方案(或者我认为是这样),我现在还是会使用它。链接到另一个问题的答案:。谢谢,您应该简单地从helper方法返回数据集,而不是读取器。我不知道哪个api会返回数据集,但我想你可以找到答案