Announcement

Collapse
No announcement yet.

c# und mysql

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • c# und mysql

    Hallo liebe Forengemeinde.

    Ich habe folgende Frage, und zwar ob diesr code so möglich ist?

    MySqlDataAdapter mda = new MySqlDataAdapter("SELECT count(*) FROM `table 1` WHERE name like ' and Auftragsnr like '" + textBox1.Text + "%'" + textBox2.Text + "%'", mcon);

    Um das Problem ein wenig zu beschreiben....
    Ich habe eine Excel tabelle in eine MySQL Datenbank überführt und versuche nun mir verschiedene Statistiken in einem gridview anzeigen zu lassen.
    Soweit hat bisher alles funktioniert wie ich es mir vorgestellt habe.
    Jetzt habe ich 2 Textboxen erstelle in der einen wird der name eingetragen und in der anderen eine auftragsnummer...funktioniert auch soweit und wird mir alles richtig im gridview angezeigt.
    Zusätlich habe ich einen Button angelegt mit folgendem Inhalt:

    private void button5_Click(object sender, EventArgs e)
    {
    MySqlConnection mcon = new MySqlConnection("database=statedv;datasource=local host;port=3306;username=root;password=");
    MySqlDataAdapter mda = new MySqlDataAdapter("SELECT count(*) FROM `table 1` WHERE name like ' and Auftragsnr like '" + textBox1.Text + "%'" + textBox2.Text + "%'", mcon);

    mcon.Open();
    DataSet ds = new DataSet();
    mda.Fill(ds, "table 1");
    dataGridView1.DataSource = ds.Tables["table 1"];
    mcon.Close();
    }

    Leider ohne erfolg!

    Was mich ein wenig stutzig macht ist das folgendes funktioniert:

    private void button5_Click(object sender, EventArgs e)
    {
    MySqlConnection mcon = new MySqlConnection("database=statedv;datasource=local host;port=3306;username=root;password=");
    MySqlDataAdapter mda = new MySqlDataAdapter("SELECT count(*) FROM `table 1` WHERE name like 'raum' and Auftragsnr like '" + textBox2.Text + "%'", mcon);

    mcon.Open();
    DataSet ds = new DataSet();
    mda.Fill(ds, "table 1");
    dataGridView1.DataSource = ds.Tables["table 1"];
    mcon.Close();
    }

    aber anderherum:

    private void button5_Click(object sender, EventArgs e)
    {
    MySqlConnection mcon = new MySqlConnection("database=statedv;datasource=local host;port=3306;username=root;password=");
    MySqlDataAdapter mda = new MySqlDataAdapter("SELECT count(*) FROM `table 1` WHERE name like ' and Auftragsnr like '15%'" + textBox1.Text + "%'", mcon);

    mcon.Open();
    DataSet ds = new DataSet();
    mda.Fill(ds, "table 1");
    dataGridView1.DataSource = ds.Tables["table 1"];
    mcon.Close();
    }

    leider nicht.

    Auch folgendes funktioniert komplett ohne probleme:

    private void button5_Click(object sender, EventArgs e)
    {
    MySqlConnection mcon = new MySqlConnection("database=statedv;datasource=local host;port=3306;username=root;password=");
    MySqlDataAdapter mda = new MySqlDataAdapter("SELECT count(*) FROM `table 1` WHERE name like 'raum' and Auftragsnr like '15%'", mcon);

    mcon.Open();
    DataSet ds = new DataSet();
    mda.Fill(ds, "table 1");
    dataGridView1.DataSource = ds.Tables["table 1"];
    mcon.Close();
    }


    Vielleicht hat da jemand einen guten tip für mich parat...wäre sehr dankbar

    Gruß!

  • #2
    Originally posted by nubie View Post
    Ich habe folgende Frage, und zwar ob diesr code so möglich ist?

    MySqlDataAdapter mda = new MySqlDataAdapter("SELECT count(*) FROM `table 1` WHERE name like ' and Auftragsnr like '" + textBox1.Text + "%'" + textBox2.Text + "%'", mcon);
    ..
    Leider ohne erfolg!
    Hallo und willkommen!

    Was bedeutet "ohne Erfolg"?
    Gibt es Fehlermeldungen? Wie lauten die?

    Wenn einfach keine Daten angezeigt werden, ist alles gut, Deine DB enthält keine Daten zu der Abfrage.


    Außerdem solltest Du Dir mal anschauen, wie man unter C# Abfragen parametriert. Das ist sicherer und auch schneller.
    Und, vielleicht etwas altmodisch, aber Tabellennamen wie 'Table 1' sind in mehrfacher Hinsicht fragwürdig. Sonderzeichen (auch Leerzeichen) gehören da nicht rein. Dann kann man sich auch die Backticks im Statement sparen. Der Name sollte außerdem etwas über den Inhalt aussagen, z.B. <auftrag> oder <order> wenn es alles Englisch ist. Sourcecode kann und soll man formatieren, das gilt auf für SQL.

    Bringt alles erhöhte Übersichtlichkeit und Lesbarkeit und man findet dann ggF. auch viel einfacher eine falsch formulierte Where Bedingung.
    Dies gilt auch gegenüber einer Commuty, die helfen soll, wenn's klemmt. Das ist eine Frage des Respekts sich selbst gegenüber und seiner Arbeit und den Helfern gegenüber.

    P.S.: Code Tags machen es noch besser!
    Gruß, defo

    Comment


    • #3
      MySqlDataAdapter mda = new MySqlDataAdapter("SELECT count(*) FROM `table 1` WHERE name like ' and Auftragsnr like '" + textBox1.Text + "%'" + textBox2.Text + "%'", mcon);
      Bei dem WHERE name like ' and fehlt auch irgendwie der Teil nach dem like das sollte so mit offenen Quotemarks einen Syntaxerror liefern und das es einen Syntaxfehler gab sollte dir die Fehlermeldung zur Laufzeit auch sagen.

      In etwas das ~Clean Code~ nahekommt sollte das mit Parametern und Resourcenverwaltung so aussehen. Eigentlich solltest du den ganzen DB Code aus der Form auslagern und diese Methode so schreiben das sie eine DataTable zurückliefert die du dann im Button Click Handler dann dem DataGridView zuweist.

      [Highlight=C#]DataTable dt = new DataTable();
      using(MySqlConnection mcon = new MySqlConnection("database=statedv;datasource=local host;port=3306;username=root;password=****"))
      {
      mcon.Open();
      using(MySqlDataAdapter mda = new MySqlDataAdapter("SELECT count(*) FROM `table 1` WHERE name like ?name and Auftragsnr like ?auftragsnr", mcon))
      {
      mda.SelectCommand.Parameters.Add("?name", MeineLiebeNameVariable);
      mda.SelectCommand.Parameters.Add("?auftragsnr", MeineLiebeAuftragsnrVariable);

      mda.Fill(dt);
      dataGridView1.DataSource = dt;
      }
      }[/Highlight]

      Comment

      Working...
      X