Seite 1 von 1

Sql Abfrage mit mehreren Bedingungen

Verfasst: Sa Jan 06, 2018 3:11 am
von Paul9981
Hey zusammen!
Mein Problem ist folgendes: Und zwar bin ich dabei ein Programm mit Einlogg-System zu schreiben und ich möchte nun, dass mein Programm aus meiner Datenbank liest ob "value" und die "produktID" richtig sind. Wenn beides der Fall ist also die Value richtig ist und die ProduktID 26 ist soll das Programm somit auf die nächste Form geleitet werden. Wenn dies nicht der Fall ist soll eine Fehlermeldung herausgegeben werden. Mein code ist folgender funktioniert jedoch nicht; weiß wer vielleicht wie er richtig geht ?
PS: Die Connection zum Server ist schon hergestellt und funktioniert auch.
Fehler.JPG

Re: Sql Abfrage mit mehreren Bedingungen

Verfasst: Sa Jan 06, 2018 1:14 pm
von cloidnerux
Hallo Paul und Willkommen im Forum.

Ein "es funktioniert nicht" ist immer etwas nutzlos, da ich nicht weiß, was es machen soll und was es stattdessen tatsächlich macht. Du kannst auch Source-Code als solchen hier Posten anstatt eines Screen-Shots, dass macht es einfacher.

Ganz grob würde ich aber sagen, dass dein

Code: Alles auswählen

'TextBox1.Text'
nicht auf den Text deiner Text Box zugreift, sondern nur tatsächlich diesen String in die SQL query schreibt, schau dir doch mit dem Debugger den Text an.

Dann noch ein Paar anmerkungen: Du übernimmst den Text direkt aus deiner TextBox, das sollte man nicht machen, da es SQL-Injection Angriffe erlaubt. Du solltest hier "Escaping" nutzen. Ein besserer Ansatz und evt auch eine Lösung ür dein Problem findest du hier: https://stackoverflow.com/questions/211 ... dwithvalue

Ist

Code: Alles auswählen

dt.Rows.Count
nicht sowie schon int? Kannst du dir nicht das Konvertieren zu einem String und dann zurück zu int sparen?
Warum ist "i" überhaupt ein Klassenmember? Das ist schlechter Stil und sorgt für Probleme.

Re: Sql Abfrage mit mehreren Bedingungen

Verfasst: Sa Jan 06, 2018 1:42 pm
von Paul9981
cloidnerux hat geschrieben:Hallo Paul und Willkommen im Forum.

Ein "es funktioniert nicht" ist immer etwas nutzlos, da ich nicht weiß, was es machen soll und was es stattdessen tatsächlich macht. Du kannst auch Source-Code als solchen hier Posten anstatt eines Screen-Shots, dass macht es einfacher.

Ganz grob würde ich aber sagen, dass dein

Code: Alles auswählen

'TextBox1.Text'
nicht auf den Text deiner Text Box zugreift, sondern nur tatsächlich diesen String in die SQL query schreibt, schau dir doch mit dem Debugger den Text an.

Dann noch ein Paar anmerkungen: Du übernimmst den Text direkt aus deiner TextBox, das sollte man nicht machen, da es SQL-Injection Angriffe erlaubt. Du solltest hier "Escaping" nutzen. Ein besserer Ansatz und evt auch eine Lösung ür dein Problem findest du hier: https://stackoverflow.com/questions/211 ... dwithvalue

Ist

Code: Alles auswählen

dt.Rows.Count
nicht sowie schon int? Kannst du dir nicht das Konvertieren zu einem String und dann zurück zu int sparen?
Warum ist "i" überhaupt ein Klassenmember? Das ist schlechter Stil und sorgt für Probleme.


Danke erstmal für deine schnelle Antwort.
hier nochmal der code:

Code: Alles auswählen

 i = 0;
            con.Open();
            MySqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT value, productID  FROM `shop1_serial` where value = 'TextBox1.Text' AND  productID = '26'";
            cmd.ExecuteNonQuery();
            DataTable dt = new DataTable();
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            da.Fill(dt);
            i = Convert.ToInt32(dt.Rows.Count.ToString());

            
            
            if ( i == 0)
            {
                this.Hide();
                Form fm = new Form2();
                fm.Show();
            }

            else
            {
                MessageBox.Show("Please check your Username and Password");
            }
            con.Close();
Wenn ich alles wegmache was mit der productID wegmache dann funktioniert das Einloggen ja ... es klappt halt nur nicht die productID mit der TextBox1.Text zu verknüpfen.

Gibt es nicht noch eine andere Methode mein Programm vor SQL-Angriffen zu schützen ?

Re: Sql Abfrage mit mehreren Bedingungen

Verfasst: Sa Jan 06, 2018 3:09 pm
von cloidnerux
Gibt es nicht noch eine andere Methode mein Programm vor SQL-Angriffen zu schützen ?
So Furchtbar kompliziert ist es ja nicht:

Code: Alles auswählen

cmd.CommandText = "SELECT value, productID  FROM `shop1_serial` where value = @Value AND  productID = @ID";
cmd.Parameters.AddWithValue("@Value", TextBox1.Text);
cmd.Parameters.AddWithValue("@ID", 26);
cmd.ExecuteNonQuery();

Re: Sql Abfrage mit mehreren Bedingungen

Verfasst: Sa Jan 06, 2018 4:58 pm
von Paul9981
Der Code sieht jetzt so aus:

Code: Alles auswählen

 i = 0;
            
            con.Open();
            MySqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT value, productID  FROM `shop1_serial` where value = @Value AND  productID = @ID";
            cmd.Parameters.AddWithValue("@Value", TextBox1.Text);
            cmd.Parameters.AddWithValue("@ID", 26);
            cmd.ExecuteNonQuery();
             
            if (i == 0 && i == 26)
            {
                MessageBox.Show("Please check your Username and Password");
               


            }
            else
            {
                this.Hide();
                Form fm = new Form2();
                fm.Show();

            }
           
            con.Close(); 
funktioniert aber leider immer noch nicht

Re: Sql Abfrage mit mehreren Bedingungen

Verfasst: Sa Jan 06, 2018 10:05 pm
von Xin
Paul9981 hat geschrieben:Der Code sieht jetzt so aus:

funktioniert aber leider immer noch nicht
Weil Du etwas bestimmtes erwartest und stattdessen passiert an welcher Stelle was?

Re: Sql Abfrage mit mehreren Bedingungen

Verfasst: So Jan 07, 2018 12:14 am
von Paul9981
ich werde auf die 2te form geleitet wenn ich login drücke..auch wenn nichts im Textfeld steht

Re: Sql Abfrage mit mehreren Bedingungen

Verfasst: So Jan 07, 2018 1:35 pm
von cloidnerux

Code: Alles auswählen

if (i == 0 && i == 26)
Das wird niemal wahr werden, i kann nicht gleichzeitig 0 und 26 sein. Meintest du ein ODER ||?

Re: Sql Abfrage mit mehreren Bedingungen

Verfasst: So Jan 07, 2018 3:14 pm
von Paul9981
Ich möchte ja, dass die nächste Form geöffnet wird nur wenn TextBox1.Text richtig ist und die Value 26 ist, ansonsten soll die Fehlermeldung kommen

Re: Sql Abfrage mit mehreren Bedingungen

Verfasst: So Jan 07, 2018 7:50 pm
von Xin
Da steht, wenn i gleich 0 ist und i gleich 26 ist. Da hast Du Schrödingers Katze in den Sack gepackt. Da steht nix von Textbox 1.
Computer machen, was Du ihnen sagst. Genau das.