Sql Abfrage mit mehreren Bedingungen

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
Antworten
Paul9981
Beiträge: 5
Registriert: Sa Jan 06, 2018 2:59 am

Sql Abfrage mit mehreren Bedingungen

Beitrag von Paul9981 » Sa Jan 06, 2018 3:11 am

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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Sql Abfrage mit mehreren Bedingungen

Beitrag von cloidnerux » Sa Jan 06, 2018 1:14 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Paul9981
Beiträge: 5
Registriert: Sa Jan 06, 2018 2:59 am

Re: Sql Abfrage mit mehreren Bedingungen

Beitrag von Paul9981 » Sa Jan 06, 2018 1:42 pm

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 ?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Sql Abfrage mit mehreren Bedingungen

Beitrag von cloidnerux » Sa Jan 06, 2018 3:09 pm

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();
Redundanz macht wiederholen unnötig.
quod erat expectandum

Paul9981
Beiträge: 5
Registriert: Sa Jan 06, 2018 2:59 am

Re: Sql Abfrage mit mehreren Bedingungen

Beitrag von Paul9981 » Sa Jan 06, 2018 4:58 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Sql Abfrage mit mehreren Bedingungen

Beitrag von Xin » Sa Jan 06, 2018 10:05 pm

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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Paul9981
Beiträge: 5
Registriert: Sa Jan 06, 2018 2:59 am

Re: Sql Abfrage mit mehreren Bedingungen

Beitrag von Paul9981 » So Jan 07, 2018 12:14 am

ich werde auf die 2te form geleitet wenn ich login drücke..auch wenn nichts im Textfeld steht

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Sql Abfrage mit mehreren Bedingungen

Beitrag von cloidnerux » So Jan 07, 2018 1:35 pm

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 ||?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Paul9981
Beiträge: 5
Registriert: Sa Jan 06, 2018 2:59 am

Re: Sql Abfrage mit mehreren Bedingungen

Beitrag von Paul9981 » So Jan 07, 2018 3:14 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Sql Abfrage mit mehreren Bedingungen

Beitrag von Xin » So Jan 07, 2018 7:50 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten