MySQL und Count

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Diabetiker.

    MySQL und Count

    Hallo zusammen,

    ich bin gerade dabei mich in das Thema mysql einzuarbeiten. Und leider verstehe ich den Aufbau so einer Abfrage nicht so ganz. Ich habe zwar einen INSTER hin bekommen aber das auch nur weil ich mir dein code kopiert habe.

    VB.NET-Quellcode

    1. Dim myConnectionString As String
    2. myConnectionString = "server=" & server & ";uid=" & user & ";pwd=" & passwort & ";database=" & datenbank & ";"
    3. Dim myConnection As New MySqlConnection(myConnectionString)
    4. Dim myInsertQuery As String = "INSERT INTO `davenet`.`serien` (`id`, `serienname`, `thetvdbapi`, `xrelapi`, `imdb`, `quali`, `status`, `plot`, `banner`, `lastxmlupdate`, `pfad`) VALUES (NULL,'" & serienname & "','" & thetvdbapi & "','" & xrelapi & "','" & imdb & "','" & quali & "','ja','" & plot & "','" & banner & "',NULL,'" & pfadbackslash & "')"
    5. Dim myCommand As New MySqlCommand(myInsertQuery)
    6. myCommand.Connection = myConnection
    7. myConnection.Open()
    8. myCommand.ExecuteNonQuery()
    9. myCommand.Connection.Close()


    Aber jetzt zu meiner eigentlichen Frage... Bevor ich einen neuen Datensatz in die Datenbank einfüge möchte ich natürlich vorher wissen ob es ihn schon gibt. Hierzu dachte ich mir könnte ich COUNT benutzen also

    SQL-Abfrage

    1. select COUNT (*) from serien WHERE thetvdbapi = '" & thetvdbapi & "'


    Mein Problem ist nun wie bekomme ich das gelieferte Ergebnis von der SQL Count Abfrage in eine Variable. :?:

    Ich hoffe das ihr mir helfen könnt.

    Danke :thumbup:

    Diabetiker
    öhm wenn ich mich gerade nicht 100% täusche müsste es

    PHP-Quellcode

    1. $Variable = Abfrage;

    sein. Bin mir aber nicht sicher. Probier es einfach mal aus.
    Gruß K4RTOFF3L

    Das Problem zu erkennen ist wichtiger, als die Lösung zu erkennen, denn die genaue Darstellung des Problems führt zur Lösung. - Albert Einstein
    Hallo nochmal,

    ich habe es jetzt mal versucht wie ich mir denke das es gehen könnte... leider ohne Erfolg.



    Ok Fehler gefunden ... zu mindestens teilweise die abfrage muss lauten "SELECT COUNT(*) FROM serien WHERE thetvdbapi = '" & thetvdbapi & "'"

    aber ich bekomme immer den Wert "-1" zurück... das kann ja nicht sein.

    Was mache ich falsch ?

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

    Was mit in dem Screen auf anhieb ins auge gefallen ist.
    Warum schreibst du Label1.Text = myCommand.ExecuteNonQuery wobei du den gleichen befehl schon 1 Zeile drüber stehen und und der ExecuteNonQueury in einem Label keinen Sinn macht ??

    Immer zuerst lesen:

    msdn schrieb:

    Mit ExecuteNonQuery können Sie Katalogoperationen ausführen (z. B. Abfragen der Struktur einer Datenbank oder Erstellen von Datenbankobjekten wie Tabellen) oder die Daten in einer Datenbank ändern, ohne ein DataSet zu verwenden, indem Sie UPDATE-Anweisungen, INSERT-Anweisungen oder DELETE-Anweisungen ausführen.
    ExecuteNonQuery gibt keine Zeilen zurück. Es werden aber Parametern zugeordnete Ausgabeparameter oder Rückgabewerte mit Daten aufgefüllt.
    Bei UPDATE-Anweisungen, INSERT-Anweisungen und DELETE-Anweisungen ist der Rückgabewert die Anzahl der vom Befehl betroffenen Zeilen. Für alle anderen Anweisungstypen ist der Rückgabewert ­1. Bei einem Rollback ist der Rückgabewert ebenfalls ­1.


    Zusätzlich einen zweiten Blick auf msdn:
    msdn.microsoft.com/de-de/library/z4956bkc(v=vs.80).aspx
    Ist unten ein Beispiel und man sieht, dass man ExecuteReader() benutzen muss.

    Falls du die MySQL-Lib verwendest -> genau gleich -> ExecuteReader() benutzen.

    Ach ja Query passt schon:

    SQL-Abfrage

    1. SELECT COUNT(*) FROM Tabelle WHERE [...] = [...];


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Hallo Zusammen,

    also ich habe es geschafft...

    VB.NET-Quellcode

    1. Dim numb = CInt(myCommand.ExecuteScalar())


    Aber ich habe schon das nächste Problem ...

    Um einen Pfad mit Backslash in die MySQL Datenbank zu bekommen muss man den Backslashja maskieren (Ich glaube so nennt man das) also aus einem Backslash werden dann drei ("\" = "\\\"). Jetzt ist der Pfad in der Datenbank drin aber wenn ich den Pfad auslesen möchte kommt nichts :cursing: Woran kann das liegen?



    Danke,

    David
    Hallo nochmal,

    ich versuche mit Dim pfad As String = reader("pfad") den Pfad aus der Datenbank auszulesen aber es kommt nix ?(

    hier erst mal der code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub DataGridView3_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView3.CellContentClick
    2. If e.ColumnIndex = 1 Then
    3. Dim rowindex As Integer = e.RowIndex
    4. Dim thetvdbapi As String = Me.DataGridView3.Item(2, rowindex).Value
    5. Dim server As String = INI_ReadValueFromFile("Einstellungen", "server", "", ".\cfg.ini")
    6. Dim user As String = INI_ReadValueFromFile("Einstellungen", "user", "", ".\cfg.ini")
    7. Dim passwort As String = INI_ReadValueFromFile("Einstellungen", "passwort", "", ".\cfg.ini")
    8. Dim datenbank As String = INI_ReadValueFromFile("Einstellungen", "datenbank", "", ".\cfg.ini")
    9. Dim myConnectionString2 As String
    10. Dim reader As MySql.Data.MySqlClient.MySqlDataReader
    11. myConnectionString2 = "server=" & server & ";uid=" & user & ";pwd=" & passwort & ";database=" & datenbank & ";"
    12. Dim myConnection2 As New MySqlConnection(myConnectionString2)
    13. Dim myInsertQuery2 As String = "SELECT * FROM serien WHERE thetvdbapi = '" & thetvdbapi & "'"
    14. Dim myCommand2 As New MySqlCommand(myInsertQuery2)
    15. myCommand2.Connection = myConnection2
    16. myConnection2.Open()
    17. reader = myCommand2.ExecuteReader
    18. Do While reader.Read()
    19. Dim serienname As String = reader("serienname")
    20. Dim status As String = reader("status")
    21. Dim quali As String = reader("quali")
    22. 'Dim thetvdbapi As String = reader("serienname")
    23. Dim xrelapi As String = reader("xrelapi")
    24. Dim imdb As String = reader("imdb")
    25. Dim banner As String = reader("banner")
    26. Dim plot As String = reader("plot")
    27. Dim pfad As String = reader("pfad")
    28. MaskedTextBox14.Text = serienname
    29. MaskedTextBox13.Text = thetvdbapi
    30. MaskedTextBox12.Text = imdb
    31. MaskedTextBox11.Text = xrelapi
    32. ComboBox2.Text = quali
    33. MaskedTextBox10.Text = banner
    34. MaskedTextBox9.Text = pfad
    35. RichTextBox2.Text = plot
    36. PictureBox2.Image = Image.FromFile("bilder\serien\" & thetvdbapi & "\" & banner)
    37. Loop
    38. myCommand2.Connection.Close()
    39. End If
    40. End Sub

    Auf den ersten Blick sehe ich keinen Fehler. Aber dir ist klar, dass du jedes mal beim Loop wieder deine Daten in den Controls wieder überschreibst?
    Außerdem würde ich mal damit anfangen deinen Code aufzuräumen. Da kennst du dich doch garantiert selbst nicht aus. myConnectionString2, myInsertQuery2 obwohl diese einen Select macht usw.

    Außerdem kann man davon ausgehen, dass du mal einen Breakpoint gesetzt hast und das mal ordentlich debuggt hast?


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ja hast recht ich keinne mich damit nicht so gut aus :P Beschäftige mich erst seit 2 Wochen mit VB. So gesehen ist es ja auch kein fehler es funktioniert ja auch soweit aber leider wird mir der Pfad bei der SQL abfrage nicht ausgegeben... Aber der Pfad ist definitiv in der Datenbank drin.