Variable in SQL Command eingeben

  • VB.NET

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

    Variable in SQL Command eingeben

    Guten Abend liebe Gemeinde,
    ich bin gerade bei der Pogrammierung eines Sync Tools für unsere Arbeit.

    Kurze Infos zum Programm.
    Das Programm dient als kleines Sync Tools bestimmter Dateien.

    Es verbindet sich zunächst auf unseren FTP Server und MySQL Server. [Funktioniert!]
    Danach liest es aus einer config.txt eine ID aus (bsp. sa65d4as5d65sad465sad45sd6) aus, dieser wird in einer Variable gespeichert.[Funktioniert]
    Nun kommt mein eigentliches Problem.

    Ich möchte nun die Datenbank durchsuchen!

    SQL-Abfrage

    1. Datenbank Name: sync
    2. Tabellenname: identifikation
    3. Inhalt:
    4. id Text(50)
    5. speicherort Text(50)
    6. Name Text(10)


    Wenn die ID in der Variable einer ID in der Datenbank übereinstimmt, soll er den Speicherort und den Namen auch in einer Variable speichern!
    Dann soll er den Namen in einer CheckedListBox speichern und wenn ich auf einen Button Sync drücke, dann eben aus dem Speicherort(FTP) die Dateien runterladen!

    Ich scheitere im Moment daran, dass ich es nicht schaffe einen ID aus einer Variablen in einem SQL Command verwenden kann um eben zu prüfen ob die ID die gleiche ist wie in der DB!
    Wie mache ich sowas? Hat da jemand Erfahrung mit?

    Vielen Dank schon Vorab!
    angenehmen Sonntag noch allen!

    Edit by der_Kurt:
    * Topic verschoben *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    Das hier ist nun meine Sub der MySQL Verbidnung und Abfrage.
    Ich habe es allerdings leider nun nicht weiter gebracht die Ergenisse des Selects auch Irgendwo anzeigen zu lassen. Weiterhin möchte ich noch erwähnen, dass das "select * from identifikation" natürlich nur ein test darstellt, da hier ja eine Anweisung rein soll wo ich das ausgelesene Key der Textdatei(wie oben beschrieben) mit einer id der Datenbank vergleichen möchte.

    Vielleicht kann mir jemand helfen!

    Spoiler anzeigen

    SQL-Abfrage

    1. Private Sub mysqlconnection()
    2. Dim conn As New MySql.Data.MySqlClient.MySqlConnection
    3. Dim myConnectionString As String
    4. Dim myCommand As New MySqlCommand
    5. 'Server Anmeldungsdaten
    6. myConnectionString = "server=xxxxx;" _
    7. & "uid=xxxxxx;" _
    8. & "pwd=xxxxxxxx;" _
    9. & "database=xxxxx;"
    10. Try
    11. 'Connection aufbauen
    12. conn.ConnectionString = myConnectionString
    13. conn.Open()
    14. myCommand.CommandText = "SELECT * FROM identifikation;"
    15. MessageBox.Show("Verbindung zur Datenbank: " & myConnectionString.ToString & " erfolgreich")
    16. Catch ex As MySql.Data.MySqlClient.MySqlException
    17. MessageBox.Show("Verbindung gescheitert!")
    18. End Try
    19. End Sub

    nun nochmals ein neuer Code des Verbindungsteils von MySQL. Ich habe es nun bisher so weit geschafft, dass ich mir eben auch Ergebnisse in einem DataGridView anzeigen lassen kann. Zwar brauche ich das nicht, aber die verbindung zur DB klappt nun. Nun stellt sich jedoch noch die Frage wie ich es schaffe, dass ich eine Abfrage mache ob die ID in der Config die Gleiche ist wie die in der DB. Wenn ja soll er noch den Namen, den Speicherort und das Passwort in eine Variable schreiben!

    Ich mache nun mal eine If Abfrage, so wie ich mir das Vorstelle. Natürlich stimmt dies nicht, aber so sollte das ganze dann funktionierren

    VB.NET-Quellcode

    1. if idaustextfile = idausdb then
    2. vname = dbname
    3. vspeicherort = dbspeicherort
    4. vpasswort = dbpasswort
    5. else
    6. messagebox.show("es wurden keine übereinstimmenden key´s gefunden")
    7. endif


    nun brauche ich quasi hilfe beim durchsuchen der datenbank und bei übereinstimmung schreiben der daten aus der db in eine Variable!

    Hier nun der Code meiner Datenbankverbidnung!


    Spoiler anzeigen

    SQL-Abfrage

    1. Private Sub mysqlconnection()
    2. 'Server Anmeldungsdaten
    3. myConnectionString = "server=xxxxxxxxx;" _
    4. & "uid=xxxxxx;" _
    5. & "pwd=xxxxxxx;" _
    6. & "database=xxxx;"
    7. Try
    8. 'Connection aufbauen
    9. conn.ConnectionString = myConnectionString
    10. conn.Open()
    11. bolVerbindung = True
    12. 'Abfrage ob Verbindung steht
    13. If bolVerbindung = True Then
    14. ds = New DataSet
    15. Else
    16. MessageBox.Show("Keine Verbindung")
    17. End If
    18. 'SQL-Abfrage erstellen und in einen String schreiben und an DataAdapter übergeben
    19. Dim sqlString As String = "Select * from identifikation"
    20. adapt = New MySqlDataAdapter(sqlString, conn)
    21. 'Übernimmt die SQL-Befehle zum einfügen etc.
    22. Dim commandbuilder As New MySqlCommandBuilder(adapt)
    23. 'Adapter übernimmt das befüllen
    24. adapt.MissingSchemaAction = MissingSchemaAction.AddWithKey
    25. adapt.Fill(ds, "identifikation")
    26. 'Verbindung wieder schließen
    27. conn.Close()
    28. bolVerbindung = False
    29. 'Das BindingSource nimmt die Prueflingstabelle aus dem Dataset
    30. 'BindingSource als Verbindung zur Form, bindet Daten an Textboxen und Labels etc...
    31. bs = New BindingSource(ds, "identifikation")
    32. MessageBox.Show("Verbindung zur Datenbank erfolgreich")
    33. Catch ex As MySql.Data.MySqlClient.MySqlException
    34. ex.ToString()
    35. End Try
    36. End Sub


    Edit by der_Kurt:
    bitte keine Doppelposts
    * Beitäge zusammengefügt *
    * Expander für den Endlos-Code eingefügt *

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    Zunächst mal: VB-Tag richtig benutzen


    Dann siehts schomal so aus:

    VB.NET-Quellcode

    1. Private Sub mysqlconnection()
    2. 'Server Anmeldungsdaten
    3. myConnectionString = "server=xxxxxxxxx;" _
    4. & "uid=xxxxxx;" _
    5. & "pwd=xxxxxxx;" _
    6. & "database=xxxx;"
    7. Try
    8. 'Connection aufbauen
    9. conn.ConnectionString = myConnectionString
    10. conn.Open()
    11. bolVerbindung = True
    12. 'Abfrage ob Verbindung steht
    13. If bolVerbindung = True Then
    14. ds = New DataSet
    15. Else
    16. MessageBox.Show("Keine Verbindung")
    17. End If
    18. 'SQL-Abfrage erstellen und in einen String schreiben und an DataAdapter übergeben
    19. Dim sqlString As String = "Select * from identifikation"
    20. adapt = New MySqlDataAdapter(sqlString, conn)
    21. 'Übernimmt die SQL-Befehle zum einfügen etc.
    22. Dim commandbuilder As New MySqlCommandBuilder(adapt)
    23. 'Adapter übernimmt das befüllen
    24. adapt.MissingSchemaAction = MissingSchemaAction.AddWithKey
    25. adapt.Fill(ds, "identifikation")
    26. 'Verbindung wieder schließen
    27. conn.Close()
    28. bolVerbindung = False
    29. 'Das BindingSource nimmt die Prueflingstabelle aus dem Dataset
    30. 'BindingSource als Verbindung zur Form, bindet Daten an Textboxen und Labels etc...
    31. bs = New BindingSource(ds, "identifikation")
    32. MessageBox.Show("Verbindung zur Datenbank erfolgreich")
    33. Catch ex As MySql.Data.MySqlClient.MySqlException
    34. ex.ToString()
    35. End Try
    36. End Sub

    Inhaltlich: Was soll diese Methode tun? eine Connection initialisieren? - Aber warum führt sie dann außerdem eine Abfrage aus.
    Das passt ühaupt nicht zusammen, denn eine Connection musste nur einmal initialisieren, eine Abfrage jedoch öfter.
    Oder du verwirfst nach jeder Abfrage die initialisierte Connection, und initialisierst bei der nächsten wieder neu.
    Auch initialisierst du ein Dataset und eine BindingSource - jedes mal neu.

    Sinnvoll wäre, Initialisierung und Abfrage zu trennen. Dann initialisierst du - ach - ist einfach vermurkst, wegen untypisiertes Dataset. Das kann man ja nicht ohne Abfrage initialisieren, jdfs nicht ohne erheblichen Aufwand.

    Nun stellt sich jedoch noch die Frage wie ich es schaffe, dass ich eine Abfrage mache ob die ID in der Config die Gleiche ist wie die in der DB.
    Du mußt halt deinen CommandString um eine Where - Klausel verlängern.

    VB.NET-Quellcode

    1. sqlString &= " Where ID = " & deineConfigID
    Habs jetzt folgendermaßen von einander getrennt. Stimmt das nun so, und ist auch der eingefügte SELECT OK?

    VB.NET-Quellcode

    1. Private Sub keypruefung()
    2. 'SQL-Abfrage erstellen und in einen String schreiben und an DataAdapter übergeben
    3. Dim sqlString As String = "Select * from identifikation where id = '" & key & "';"
    4. adapt = New MySqlDataAdapter(sqlString, conn)
    5. 'Übernimmt die SQL-Befehle zum einfügen etc.
    6. Dim commandbuilder As New MySqlCommandBuilder(adapt)
    7. 'Adapter übernimmt das befüllen
    8. adapt.MissingSchemaAction = MissingSchemaAction.AddWithKey
    9. adapt.Fill(ds, "identifikation")
    10. 'Verbindung wieder schließen
    11. conn.Close()
    12. bolVerbindung = False
    13. 'Das BindingSource nimmt die Prueflingstabelle aus dem Dataset
    14. 'BindingSource als Verbindung zur Form, bindet Daten an Textboxen und Labels etc...
    15. bs = New BindingSource(ds, "identifikation")
    16. End Sub


    VB.NET-Quellcode

    1. Private Sub mysqlconnection()
    2. 'Server Anmeldungsdaten
    3. myConnectionString = "xxxxxx;" _
    4. & "uid=xxxxx;" _
    5. & "pwd=xxxxxxx;" _
    6. & "database=xxxxx;"
    7. Try
    8. 'Connection aufbauen
    9. conn.ConnectionString = myConnectionString
    10. conn.Open()
    11. bolVerbindung = True
    12. 'Abfrage ob Verbindung steht
    13. If bolVerbindung = True Then
    14. ds = New DataSet
    15. Else
    16. MessageBox.Show("Keine Verbindung")
    17. End If
    18. Catch ex As MySql.Data.MySqlClient.MySqlException
    19. ex.ToString()
    20. End Try
    21. End Sub
    Leider bin ich gaanz neu in der Materie und weiß nicht was schön ist oder nicht. Nein, da sind wir ja wieder bei meinem eigentlichen problem. WIe kann ich denn nun per einfache if else rausfinden ob die beiden key´s gleich sind?
    Ich weiß nicht wie ich den db key ansprechen kann?
    Und wie ich dann falls gleicheit besteht die anderen db daten(name, speicherort, passwort) in variablen schreiben kann!
    Wenns geklappt hat, dann sind die Werte bereits in Variablen geschrieben, nämlich ins Dataset gefüllt. (das ist die tiefere Bedeutung von adapt.Fill(ds, "identifikation"))
    Du kannst etwa bs.Count überprüfen, um zu gucken, ob ein Datensatz gefunden wurde.
    Du kannst auch ein DatagridView aufs Form tun, und dessen DataSource auf die BindingSource setzen.

    cnwund schrieb:

    Leider bin ich gaanz neu in der Materie und weiß nicht was schön ist oder nicht. Nein, da sind wir ja wieder bei meinem eigentlichen problem. WIe kann ich denn nun per einfache if else rausfinden ob die beiden key´s gleich sind?


    Das brauchst Du nicht mehr, da die SELECT-Abfragen mit WHERE ID = '<MeinKey>' Dir nur die Datensätze zurück liefert in denen die ID's übereinstimmen.


    Ich weiß nicht wie ich den db key ansprechen kann?


    Hast Du doch bereits im WHERE-Teil des Statements ... oder verstehe ich Dich da gerade falsch?


    Und wie ich dann falls gleicheit besteht die anderen db daten(name, speicherort, passwort) in variablen schreiben kann!


    Die Frage verstehe ich zwar, aber den Sinn dahinter nicht ... durch die Zuweisung als BindingSource hast Du doch alle Werte bereits an ein Formular gebunden, richtig? Wenn ja kannst Du die Werte doch da direkt auslesen.

    Gruß

    Rainer