Laden...

DataTable kann nicht gefunden werden - Update funktion für mysql

Erstellt von Daniel002 vor 13 Jahren Letzter Beitrag vor 13 Jahren 5.219 Views
D
Daniel002 Themenstarter:in
11 Beiträge seit 2010
vor 13 Jahren
DataTable kann nicht gefunden werden - Update funktion für mysql

Hallo,
der Aufbau zur mysql Datenbank funktioniert problemlos. Die Daten werden ausgelesen und ins Datagrid eingefügt.
Jetzt wollte ich aktuallisierte Datensätze in die mysql Datenbank eintragen/erneuern.

Die msg-box sagt folgendes: "Es ist ein Fehler aufgetreten : Update: TableMapping['Bestellungen'] oder DataTable 'Bestellungen' kann nicht gefunden werden.

Er findet also die Tabelle Bestellungen nicht, jedoch kann diese aufrufen, also sollte er sie doch finden oder?

Hier der Code:

            string myConnectionString = "Data Source=xxx;" +
                            "DATABASE=xxx;" +
                            "UID=xxx;" +
                            "PASSWORD=xxx;";

            MySqlConnection conn = new MySqlConnection(myConnectionString);
            MySqlCommand cmd = new MySqlCommand("SELECT * FROM Bestellungen", conn);
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
            DataSet ds = new DataSet();
            dataGridViewAusgabe.DataSource = ds;

            try
            {
                conn.Open();
                da.Update(ds, "Bestellungen");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Es ist ein Fehler aufgetreten : " + ex.Message);
            }
            conn.Close();

Vielen herzlichen Dank für jede Hilfe.

1.373 Beiträge seit 2004
vor 13 Jahren

Kann das sein, dass du da.Fill (= Daten laden) machen möchtest statt da.Update (= Daten in DB zurückschreiben)?

[edit]Ah, sorry, du möchtest aktualisieren schreibst du. Hast du denn ein InsertCommand angegeben? Lädst du vorher die Daten in das Dataset, damit es das Schema kennt?[/edit]

F
10.010 Beiträge seit 2004
vor 13 Jahren

Vielleicht solltest Du auch beim Update die DataTable nehmen die Du geändert hast, und nicht eine neue Erzeugen.

D
Daniel002 Themenstarter:in
11 Beiträge seit 2010
vor 13 Jahren

Hallo,
vielen Dank für die Beiträge, bin jedoch ein wenig durcheinander. Hatt jemand evt. ein gutes Tutorial, wo das Thema update auch erklärt wird?
Mit freundlichen Grüßen

F
10.010 Beiträge seit 2004
vor 13 Jahren

Steht eigentlich in jedem Tutorial.

Du musst nur ( wie ich schon sagte ) in deinem beispiel eben das DataSet nehmen das Du zum lesen benutzt hast.

Du legst da ein neues an, das kann keine daten beinhalten die du schreiben möchtest.

D
Daniel002 Themenstarter:in
11 Beiträge seit 2010
vor 13 Jahren
        public void button2_Click(object sender, EventArgs e)
        {
            MySqlCommand mscGebiete = new MySqlCommand("SELECT * FROM `Bestellungen` WHERE 1", new MySqlConnection("username=xxx;database=xxx;password=xxx;host=xxx"));
            MySqlDataAdapter daGebiete = new MySqlDataAdapter(mscGebiete);
            MySqlCommandBuilder mcbGebiete = new MySqlCommandBuilder(daGebiete);
            DataSet ds = new DataSet("Gondal");
            daGebiete.Fill(ds, "Gebiete");
           dataGridViewAusgabe.DataSource = ds;
           dataGridViewAusgabe.DataMember = "Gebiete";
        }
        public void buttonRefresh_Click(object sender, EventArgs e)
        {
            try
            {
                conn.Open();
                daGebiete.Update(ds, "Bestellungen");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Es ist ein Fehler aufgetreten : " + ex.Message);
            }
            conn.Close();

        }

Woran ich gerade hänge ist, wie bekomme ich das Objekt daGebiete und ds übergeben? Static soll man ja nicht verwenden (was auch nicht klappte).

F
10.010 Beiträge seit 2004
vor 13 Jahren

Garnicht, brauchst du auch nicht.

Erstelle einen neuen DataAdapter.


public void button2_Click(object sender, EventArgs e)
{

    dataGridViewAusgabe.DataSource = ReadTable( "SELECT * FROM `Bestellungen`", "Bestellungen", ConnectionString);

}

public void buttonRefresh_Click(object sender, EventArgs e)
{
    UpdateTable( dataGridViewAusgabe.DataSource as DataTable, "Bestellungen", ConnectionString);
}


DataTable ReadTable( string query, string tableName, string connectionString )
{
    MySqlDataAdapter daGebiete = new MySqlDataAdapter(query, ConnectionString);
    DataTable dt = new DataTable(tableName);
    daGebiete.Fill(dt);
    return dt;
}
void UpdateTable( DataTable dataTable, string tableName, string connectionString)
{
    string query = string.Format("SELECT * FROM '{0}'", tableName );
    MySqlDataAdapter daGebiete = new MySqlDataAdapter(query, ConnectionString);
    MySqlCommandBuilder mcbGebiete = new MySqlCommandBuilder(daGebiete);
    daGebiete.Update(dataTable);
}



D
Daniel002 Themenstarter:in
11 Beiträge seit 2010
vor 13 Jahren

Hat perfekt geklappt, vielen herzlichen Dank für deine Hilfe.

Eine Kleinigkeit war da noch, sonst einfach perfekt.

string query = string.Format("SELECT * FROM `Bestellungen`", tableName);

anstatt

string query = string.Format("SELECT * FROM '{0}'", tableName );

Vielen vielen Dank.

Gelöschter Account
vor 13 Jahren

Eine Kleinigkeit war da noch, sonst einfach perfekt.

C#-Code:
string query = string.Format("SELECT * FROM Bestellungen", tableName);

anstatt

C#-Code:
string query = string.Format("SELECT * FROM '{0}'", tableName );

Wenn die variable "tableName" den Wert "Bestellungen" hat (welchen du ja übergeben kannst/musst, dann passt das untere Beispiel besser, weil du dann nicht für jede Tabelle den gleichen Code brauchst.

1.373 Beiträge seit 2004
vor 13 Jahren

Vor allem ist das erste etwas sinnbefreit, da der Formatstring gar keinen Platzhalter mehr enthält ({0}), trotzdem aber ein Wert dafür übergeben wird. Dann kann man auch direkt ein normales String-Literal verwenden.

D
Daniel002 Themenstarter:in
11 Beiträge seit 2010
vor 13 Jahren

Ja, nur es kam ein Laufzeitfehler wenn ich den unteren Code genommen hatte.

A
69 Beiträge seit 2010
vor 13 Jahren

Wenn du einen falschen Tabellennamen übergibst, dann kommt ein Laufzeitfehler....

D
Daniel002 Themenstarter:in
11 Beiträge seit 2010
vor 13 Jahren

Wenn du einen falschen Tabellennamen übergibst, dann kommt ein Laufzeitfehler....

Ähmm, ja deshalb hatte ich auch Bestellungen genommen, bei {0} kam der Laufzeitfehler.

@Arithmetika Evt. hast du dir den Thread nicht ganz durchgelesen.

A
69 Beiträge seit 2010
vor 13 Jahren

Ich habe den Thread sehr wohl gelesen. Ich denke aber das du string.Format(...) nicht verstanden hast.

D
Daniel002 Themenstarter:in
11 Beiträge seit 2010
vor 13 Jahren

Kann natürlich auch sein 😃 wäre nett wenn du mir das nochmal in simplen Worten erklärst.

Hinweis vor 13 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig? 1.1.1

Wie String.Format funktioniert, kannst du der Dokumentation entnehmen.