Wie zu vermeiden, "Es ist bereits ein geöffneter DataReader zugeordnet diesen Zusammenhang, die zuerst geschlossen werden." in MySql/net connector?
Habe ich das folgende Stück code:
public TimestampedRowStorage GetTimestampedRowStorage(string startTime, string endTime, long trendSettingID, int? period)
{
var timestampedList = (from t in dataContext.TrendRecords
where t.TrendSetting_ID == trendSettingID
select t).ToList();
return new TimestampedRowStorage
{
TimestampedDictionary = timestampedList.ToDictionary(m => m.Timestamp,
m => (from j in dataContext.TrendSignalRecords
where j.TrendRecord_ID == m.ID
select j).ToDictionary(p => p.TrendSignalSetting.Name,
p => (double?)p.Value))
};
}
Aber ich bekomme immer folgende exception:
Es ist bereits ein geöffneter DataReader
im Zusammenhang mit dieser Verbindung, die
muss zuerst geschlossen werden.
Hier ist der stack trace:
[MySqlException (0x80004005): Es ist
bereits ein geöffneter DataReader zugeordnet
mit dieser Verbindung werden muss
zunächst geschlossen.]
MySql.Daten.MySqlClient.MySqlCommand.CheckState()
+237 MySql.Daten.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior
Verhalten) +146
MySql.Daten.Entität.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior
Verhalten) +47
System.Daten.Common.DbCommand.ExecuteReader(CommandBehavior
Verhalten) +10
System.Daten.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand
entityCommand, CommandBehavior
Verhalten) +443[EntityCommandExecutionException:
Fehler beim ausführen der
command-definition. Finden Sie die innere
Ausnahme für details.]
System.Daten.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand
entityCommand, CommandBehavior
Verhalten) +479
System.Daten.Objekte.Intern.ObjectQueryExecutionPlan.Execute(ObjectContext
Kontext, ObjectParameterCollection
parameterValues) +736
System.Daten.Objekte.ObjectQuery1.GetResults(Nullable
1
forMergeOption) +149
System.Daten.Objekte.ObjectQuery1.Execute(MergeOption
1.Belastung(MergeOption
mergeOption) +31
System.Data.Objects.DataClasses.EntityReference
mergeOption) +148
System.Daten.Objekte.DataClasses.RelatedEnd.Load()
+37 System.Daten.Objekte.DataClasses.RelatedEnd.DeferredLoad()
+8032198 System.Daten.Objekte.DataClasses.EntityReference1.get_Value()
1
+12 Nebula.Models.TrendSignalRecord.get_TrendSignalSetting()
in C:\Users\Bruno
Leonardo\documents\visual studio
2010\Projects\Nebula\Nebula\Models\SmgerDataModel.Designer.cs:2528
Nebula.Models.Trends.TrendRepository.<GetTimestampedRowStorage>b__b(TrendSignalRecord
p) in C:\Users\Bruno
Leonardo\documents\visual studio
2010\Projects\Nebula\Nebula\Models\Trends\TrendRepository.cs:229
System.Linq.Enumerable.ToDictionary(IEnumerable
source, Func2 keySelector, Func
2
elementSelector, IEqualityComparer1
1
comparer) +226
System.Linq.Enumerable.ToDictionary(IEnumerable
source, Func2 keySelector, Func
2
elementSelector) +54
Nebel.Modelle.Trends.TrendRepository.b__a(TrendRecord
m) in C:\Users\Bruno
Leonardo\Dokumente\visual studio
2010\Projects\Nebel\Nebel\Models\Tendenzen\TrendRepository.cs:227
System.Linq -.Enumerable.ToDictionary(IEnumerable1
2 keySelector, Func
source, Func2
1
elementSelector, IEqualityComparer
comparer) +240
System.Linq -.Enumerable.ToDictionary(IEnumerable1
2 keySelector, Func
source, Func2
1 Periode) in
elementSelector) +53
Nebula.Models.Trends.TrendRepository.GetTimestampedRowStorage(String
startTime, String endTime, Int64
trendSettingID, Nullable
C:\Benutzer\Bruno
Leonardo\Dokumente\visual studio
2010\Projects\Nebel\Nebel\Models\Tendenzen\TrendRepository.cs:224
Nebel.Modelle.Trends.TrendRepository.GetTrendSettingContainer(String
Startzeit, String endTime, Int64
unitID, Int64 plantID, Int64
trendSettingID, GridSortOptions
gridSortOptions, Nullable1 page,
1 recordsPerPage, Nullable
Nullable1
1
period, Int64[] trends, Nullable
allTrends) C:\Users\Bruno
Leonardo\Dokumente\visual studio
2010\Projects\Nebel\Nebel\Models\Tendenzen\TrendRepository.cs:206
Nebel.Controller.GeneratingUnitController.TrendSettings(Int64
id, Int64 plantID, Int64
trendSettingID, String startTime,
String endTime, Nullable1 page,
1 recordsPerPage,
Nullable
GridSortOptions Optionen, Nullable1
1
period, Int64[] trends, Nullable
allTrends) C:\Users\Bruno
Leonardo\Dokumente\visual studio
2010\Projects\Nebel\Nebel\Controller\GeneratingUnitController.cs:148
lambda_method(Schließung , ControllerBase
Object[] ) +543
Könnt Ihr mir helfen?
InformationsquelleAutor Bruno Machado - vargero | 2011-06-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Fehler ist wahrscheinlich, weil Sie versuchen, auf die Datenbank zugreifen, während Sie auf die Datenbank zugreifen.
Sie sollten versuchen, die beiden trennen Linq-Ausdrücke.
Vielleicht etwas wie dieses:
was meinst du mit tiefer in den code? Das stack-trace sieht aus wie es ist, den genauen Punkt, beide Antworten angesprochen. Vielleicht haben Sie mehrere Instanzen dieses Problem in deinem code? Ist dies der einzige Ort, den Sie verwenden von LINQ mit dem MySql-connector?
Es ist nicht der einzige Ort ist, aber ich habe überprüft, ob es funktioniert hat, indem, statt die zweite Wörterbuch, instanziieren Sie ein neues ein, und es funktionierte. Dies bedeutet, dass, wenn es ein problem irgendwo, das ist der Ort.
Von tiefer meinte ich, "nicht in meinem code" ... es hat wahrscheinlich in der übersetzung verloren.
Auch ohne zu Graben in die mysql-connector-code ist es schwer zu sagen, was Los ist. Es könnte ein bug im connector code.
InformationsquelleAutor Tejo
Ich nehme an, MySql-connector nicht unterstützt MARS (Multiple active result sets). In einem solchen Fall können Sie dies tun:
Sobald Sie dies tun, Sie werden auflisten Ergebnis der ersten L2S-Abfrage (=
DataReader
ist noch offen) und der Ausführung einer zweiten L2S-Abfrage für jeden Datensatz aus der ersten (= Sie müssen die zweiteDataReader
).Müssen Sie ausführen der ersten Abfrage separat durch den Aufruf
ToList
und nach, dass die Iteration Ergebnis-und build-Wörterbuch.InformationsquelleAutor Ladislav Mrnka
nennen .toList() in der ersten Abfrage
InformationsquelleAutor ihebiheb
Lief ich in diese Fehlermeldung heute auch. Ich war mit einer Verbindung für mehr als eine Sache. Wie diese:
Aber wenn ich öffnete und Schloss die Verbindung, für jede Aktion, es hat geklappt:
InformationsquelleAutor C Johnson