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-code

Zusä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 die using-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 ist static 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.
InformationsquelleAutor methuselah | 2015-02-03
Schreibe einen Kommentar