MS SQL Abfrage über Visual Basic mit mehreren Suchfeldern

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von MK_CGN.

    MS SQL Abfrage über Visual Basic mit mehreren Suchfeldern

    Hallo zusammen,
    ich habe folgenden Code bisher erfolgreich genutzt, damit ich anhand einer ID eine Abfrage in der MS SQL Datenbank durchführe und dann definierte Felder (Textboxen) füllen lasse.

    Auszug

    Quellcode

    1. Dim Connection As New SqlConnection("SERVER=TESTSERVER;database=TESTDB;UID=Benutzername;Pwd=Passwort")
    2. Dim Command As New SqlCommand("Select * From [DB].[Tabelle1] Where P_ID = @ID", Connection)
    3. Command.Parameters.Add("@ID", SqlDbType.VarChar).Value = TextBox_ID.Text


    Jetzt ist es aber so, dass nicht nur mit einer ID gesucht werden soll, sondern auch die Möglichkeit über den Namen gegeben sein soll.
    Meine Idee hierzu ist:

    Quellcode

    1. Dim Connection As New SqlConnection("SERVER=TESTSERVER;database=TESTDB;UID=Benutzername;Pwd=Passwort")
    2. Dim Command As New SqlCommand("Select * From [DB].[Tabelle1] Where P_ID = @ID OR P_Name = @Name", Connection)
    3. Command.Parameters.Add("@ID", SqlDbType.VarChar).Value = TextBox_ID.Text
    4. Command.Parameters.Add("@Name", SqlDbType.VarChar).Value = TextBox_Name.Text


    Leider funktioniert das so nicht.. Das Datagridview was gefüllt werden soll funktioniert bei der Suche über die ID, aber nicht bei der Suche über den Namen.
    Hier werden dann alle Daten aus der Tabelle angezeigt.

    Was mache ich falsch? Wie ist es vielleicht intelligenter zu lösen?

    Über Eure Ideen würde ich mich freuen.
    Hallo

    MK_CGN schrieb:

    Hier werden dann alle Daten aus der Tabelle angezeigt.

    Das kann ich dir jetzt irgendwie nicht glauben, tut mir leid. Es werden laut der Abfrage alle Datensätze wo die Id ODER der Name übereinstimmt angezeigt.

    Willst du alle nach dem Namen suchen dann so:

    VB.NET-Quellcode

    1. Dim Connection As New SqlConnection("SERVER=TESTSERVER;database=TESTDB;UID=Benutzername;Pwd=Passwort")
    2. Dim Command As New SqlCommand("Select * From [DB].[Tabelle1] Where P_Name = @Name", Connection)
    3. Command.Parameters.Add("@Name", SqlDbType.VarChar).Value = TextBox_Name.Text


    Und wenn beides übereinstimmen soll dann so:

    VB.NET-Quellcode

    1. Dim Connection As New SqlConnection("SERVER=TESTSERVER;database=TESTDB;UID=Benutzername;Pwd=Passwort")
    2. Dim Command As New SqlCommand("Select * From [DB].[Tabelle1] Where P_ID = @ID AND P_Name = @Name", Connection)
    3. Command.Parameters.Add("@ID", SqlDbType.VarChar).Value = TextBox_ID.Text
    4. Command.Parameters.Add("@Name", SqlDbType.VarChar).Value = TextBox_Name.Text

    Wichtig hier das AND in der Where Klausel.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo und guten Morgen,
    ich habe mich glaube ich falsch ausgedrückt. Es werden natürlich alle Treffer angezeigt und nicht alle Daten aus der Tabelle.

    Ich benötige allerdings keine AND Verknüpfung, sondern die Möglichkeit, dass der User entweder die ID oder den Namen in die beiden Textboxen eintragen kann und dann die Abfrage startet.

    MK_CGN schrieb:

    entweder die ID oder den Namen in die beiden Textboxen eintragen kann
    Dann musst du vorher ermitteln, ob die Eingabe in der Textbox die ID ist oder der name. Dann beim Erstellen des SQL Statements entsprechend eine Weiche (IF Abfrage) einbauen damit entweder nach ID oder Namen gesucht wird. Sind also 2 SQL Statements die du dann hast. Eine für die ID und eins für den Namen.

    Wobei ich nicht verstehe warum du soetwas machen willst. Nen OR or Statement (so wie du es selbst geschrieben hast) langt doch oder nicht?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Das Leben kann manchmal so einfach sein. Habe es mit einer If-Abfrage gelöst. Funktioniert einwandfrei.

    Eine weitere Frage habe ich allerdings noch:
    Ich bekomme in einer zurückgegeben Spalte pro Datensatz immer nur eine Nummer 1-xxx aus der Datenbank angezeigt, weil diese dort auch so gespeichert ist.
    Kann ich anstelle der Nummer auch im Datagridview einfach einen Namen anzeigen lassen?

    Beispiel: Wenn in der Spalte im angezeigten Datensatz eine 1 steht, dann soll dort Firma A stehen?

    Wichtig: Es wird nur aus der DB gelesen und nichts zurückgeschrieben.
    Wie sieht deine Tabelle denn aus? Oder steht in einer Tabelle die ID und in einer aderen die Firma zur ID? Dann musst du ein JOIN in dein SQL Statement einbauen und damit quasi 2 Tabellen „zusammenführen“
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Sql Server Managment Studio bietet sehr gute Möglichkeiten sich ein Join zusammen zu "klicken" selbst für Anfänger... Einfach eine Neue Sicht erstellen, vieles bietet es schon an. Den SQL-String kann man sich dann rauskopieren und benutzen...