Eine Ausnahme des Typs " MySql.Daten.MySqlClient.MySqlException " ist in MySql.Data.dll wurde aber nicht behandelt werden, in Benutzer-code
Ich erhalte immer folgende Fehlermeldung:
Eine Ausnahme des Typs " MySql.Daten.MySqlClient.MySqlException " ist
in MySql.Data.dll wurde aber nicht behandelt werden, in Benutzer-codeZusätzliche Informationen: Es ist bereits ein geöffneter DataReader zugeordnet
mit dieser Verbindung, die zuerst geschlossen werden.
in da.Fill(dtCounts);
jedes mal, wenn ich meinen code. Kennt jemand den Grund dafür?
Aus irgendeinem Grund, S/O wird nicht lassen Sie mich einfügen mein code, so ich habe es hochgeladen hier: http://pastebin.com/LCnTBVY4
Edit: Hier ist es:
public static void RefreshPlot()
{
string query = "SELECT Count(*) AS count, plot_id FROM booking WHERE postcode=@postcode AND " +
"status='open' GROUP BY plot_id";
var cmd = new MySqlCommand(query, DbConnect.Connection);
cmd.Parameters.AddWithValue(("@postcode"), DbConnect.Plot);
var da = new MySqlDataAdapter(cmd);
var dtCounts = new DataTable();
da.Fill(dtCounts);
if (dtCounts.Rows.Count > 0)
{
query = "UPDATE plot SET jobs = @jobCount WHERE plot_id = @plotID AND postcode=@postcode;";
query += "UPDATE plot " +
"LEFT JOIN booking " +
"ON plot.plot_id = booking.plot_id " +
"SET plot.jobs = 0 " +
"WHERE plot.postcode=@postcode " +
"AND booking.plot_id IS NULL;";
query += "update plot p " +
"inner join " +
"(select sum(case when status = 'Open' then 1 else 0 end) cnt, plot_id " +
"from booking group by plot_id) p2 on p.plot_id = p2.plot_id " +
"set p.jobs = p2.cnt;";
cmd = new MySqlCommand(query, DbConnect.Connection);
foreach (DataRow row in dtCounts.Rows)
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue(("@postcode"), DbConnect.Plot);
cmd.Parameters.AddWithValue("@jobCount", int.Parse(row["count"].ToString()));
cmd.Parameters.AddWithValue("@plotID", int.Parse(row["plot_id"].ToString()));
cmd.ExecuteNonQuery();
}
}
else if ((dtCounts.Rows.Count == 0))
{
query = "UPDATE plot SET jobs=0 WHERE postcode=@postcode;";
cmd = new MySqlCommand(query, DbConnect.Connection);
cmd.Parameters.AddWithValue(("@postcode"), DbConnect.Plot);
cmd.ExecuteNonQuery();
}
}
- Ich rate davon ab, eine solche öffentliche verbindungen wie
DbConnect.Plot
mehr, wenn Sie statisch sind. Warum gehst du nicht erstellen Sie das connection-Instanz, wo Sie es verwenden, am besten durch dieusing
-Anweisung, um sicherzustellen, dass es geschlossen wird, so bald wie möglich? Vielleicht Verwandte: stackoverflow.com/questions/9705637/... - Dank Tim - was ist verwirrend mich jetzt versucht herauszufinden, würde ich auf die ConnectionString (in der Klasse DbConnect). Wie kann ich es von der PlotComponent-Klasse (wie oben gesehen)? Ich habe hochgeladen, die DbConnect class in pastebin.com/GMRN0tWq. Nicht sicher, ob ich tatsächlich bekommen können Sie es aus dem inneren des try-catch. Können Sie bitte helfen?
- warum kann man nicht Zugriff auf den connection-string in die Klasse? Es tut nicht weh, wenn es
pulic static
da Sie sich nicht ändern, obwohl ich verwenden würde, app-Einstellungen, welche auch zwischengespeichert. Aber die Verbindung iststatic
was ich schon befürchtet. Tun Sie das nicht! - Meinst du
public static MySqlConnection Connection
? Warum sollte es statisch sein? Plus ich weiß nicht, wie Sie darauf zugreifen (mit Bezug auf den connection-string * duckt Gesicht * - Ich habe einen link gepostet in meinem ersten Kommentar, die hoepfully erklärt es besser. Es gibt auch eine Probe mit einer nicht-statischen Verbindung und die
using
-Anweisung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, verwenden Sie die Anweisung using auf jeden new MySqlCommand und Adapter für die Entsorgung der Ressourcen.
Beispiel:
Haben Sie ein geöffneter datareader in Ihrer Verbindung wird nicht geschlossen.
Vielleicht haben Sie einige code anderswo verwendet die gleiche Verbindung.
Verwenden Sie die Anweisung using auf die Befehle überall, dann sollten Sie geschlossen werden.
Sicher zu sein könntest du eine neue Verbindung erstellen.