# c# und mysql



## nubie (1. April 2016)

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=localhost;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=localhost;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=localhost;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=localhost;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ß!


----------



## ComFreek (1. April 2016)

Hallo!

Du hast in den Fällen, in denen es nicht funktioniert, Syntax-Fehler in deinem SQL:

```
"SELECT count(*) FROM `table 1` WHERE name like ' and Auftragsnr like '15%'" + textBox1.Text + "%'"
```

Der SQL-Parser sieht "WHERE name like ' and Auftragsnr like'" als eine Bedingung und dann kommt direkt eine 1, was wahrscheinlich in einem Syntax-Fehler resultiert.

Nach welchem Namen (oder Raum im anderen Beispiel von dir) soll denn gesucht werden?

Ich würde dir auch sehr empfehlen, die Inhalte der Textboxen nicht einfach so in den String einzubetten, das erlaubt SQL-Injection-Angriffe! Es gibt bestimmt eine Funktion zum Maskieren fremder Eingaben (Stichwort "escape") oder gleich für Prepared Statements für die MySQL-Bibliotheksschnittstelle in C#.


----------

