2017-08-27 4 views
0

Ich habe die folgende Methode in der Helper Klasse zu lesen, die ich mit Dapper bin mit:fehlgeschlagen, nachdem genannt Abfrage mehr in 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); 
    } 
} 

Und ich rufe die obige Verfahren von einer anderen Klasse DataAccess genannt:

DataAccess.cs:

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; 
} 

Allerdings haben die multi variable die Daten, aber sobald ich es trennen und in eine andere Variable zuordnen möchte, bekam ich die Ausnahme cannot read while the reader is closed genannt.

Ich weiß, dass, weil ich die using statement gewohnt bin, so nach dem multi variable, wird die Verbindung automatisch geschlossen bekommen, deshalb kann ich nicht alles lesen ..

Wie kann ich dieses Problem lösen?

Ihre Antwort sehr geschätzt

Dank

+0

Sie einfach das Daten-Set stattdessen die Leser von der Hilfsmethode zurückgeben sollte. Ich weiß nicht genau, welche API den Datensatz zurückgibt, aber ich denke, du kannst das herausfinden – ibubi

Antwort

0

Die Verbindung geschlossen wird immer, bevor Sie es zu lesen versuchen. Das wird nicht funktionieren.

Ich würde vorschlagen, wie dies zu versuchen:

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

Hallo, wenn ich den einen mag, den du in der 'Helfer'-Klasse erwähnt hast, wie kann ich dann auch' Lesen' bekommen? Wäre es nicht, wenn ich versuche, das 'Read' zu versuchen, werde ich den gleichen Fehler wieder treffen? Danke – Natsuki

+0

Ich habe den Code erwähnt, der in DataAccess-Klasse –

+0

verwendet werden soll. Danke, lassen Sie mich überprüfen, ob es eine andere Möglichkeit gibt, dies zu erreichen, anstelle der Verbindung und der Abfrage in der Datenzugriffsklasse – Natsuki