WinFuture-Forum.de: c# und mysql - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

c# und mysql


#1 Mitglied ist offline   nubie01 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 09. Februar 16
  • Reputation: 0

geschrieben 01. April 2016 - 07:49

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ß!
0

Anzeige



#2 Mitglied ist offline   aeris 

  • Gruppe: aktive Mitglieder
  • Beiträge: 129
  • Beigetreten: 06. September 08
  • Reputation: 12
  • Geschlecht:unbekannt

geschrieben 01. April 2016 - 08:31

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

stimmt nicht.

Nehmen wir mal an der Benutzer schreibt "Foo" in Textbox1 und "Bar" in Textbox2, dann kommt bei dir folgendes heraus
SELECT count(*) FROM `table 1` WHERE name like ' and Auftragsnr like 'Foo%'Bar%'

Was kein valides SQL Statement ist.

Korrekt wäre
SELECT count(*) FROM `table 1` WHERE name like 'Foo%' and Auftragsnr like 'Bar%'


Außerdem sollte man niemals Benutzereingaben ohne Parameter manuell zusammenfügen, das kann ganz böse enden.
Siehe https://de.wikipedia...i/SQL-Injection

Du solltest daher immer SqlParameter benutzen.
https://dev.mysql.co...parameters.html


Hier ein Beispiel (Achtung blind und ungetestet getippt, kann geringfügig abweichen)

private void button5_Click(object sender, EventArgs e)
{
    using(var mcon = new MySqlConnection("database=statedv;datasource=localhost;port=3306;username=root; password="))
    using(var mcmd = mcon.CreateCommand())
    {
        mcon.Open();

        mcmd.CommandText = "SELECT count(*) FROM `table 1` WHERE name like @name and Auftragsnr like @nr";
        mcmd.Parameters.AddWithValue("@name", textBox1.Text + "%");
        mcmd.Parameters.AddWithValue("@nr", textBox2.Text + "%");
        
        using(var da = new MySqlDataAdapter(mcmd))
        {
            var dt = new DataTable();
            da.Fill(dt);
            dataGridView1.DataSource = dt;
        }
    }
}

2

#3 Mitglied ist offline   nubie01 

  • Gruppe: Mitglieder
  • Beiträge: 4
  • Beigetreten: 09. Februar 16
  • Reputation: 0

geschrieben 01. April 2016 - 08:50

Vielen lieben Dank!!!!

Dein Code funktioniert optimal, genau so wie ich es mir vorgestellt habe.
Da ich gerad erst angefangen habe mit c# und MySQL war ich schon am verzweifeln.
Aber im nachhinein ist mein Ansatz natürlich nicht logisch.
Nocham vielen Dank ;)

Gruß!
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0