MySQL Lesen ja, löschen/anlegen nein?

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von simpelSoft.

    MySQL Lesen ja, löschen/anlegen nein?

    Hey,
    ich habe bei lima-city.de eine Datenbank (bin noch in der Testphase). Über diese Datenbank möchte ich mich anmelden, was auch funktioniert, also Verbindung ist.
    Jedoch wenn ich über folgenden Code versuche einen Datensatz anzulegen, passiert einfach nichts.
    Spuckt zwar keinen Fehler aus, funktioniert aber auch nicht.
    Soweit ich weiß ist das auch in der Testphase möglich, theoretisch...

    Wenn ich den MySQL Befehl direkt bei phpmyadmin eingebe, funktioniert der einwandfrei. Ich kann alle Daten problemlos lesen, wie gesagt nur anlegen und löschen geht nicht.

    VB.NET-Quellcode

    1. Private Sub bt_register_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_register.Click
    2. mysqlconn = New MySqlConnection
    3. mysqlconn.ConnectionString = "server=mysql.lima-city.de;userid=<myuid>;password=<mypw>;database=<mydb>"
    4. Try
    5. mysqlconn.Open()
    6. Dim query As String
    7. query = "INSERT INTO `db_330311_1`.`user` (`ID`, `username`, `password`, `ypoints`) VALUES (NULL, '" & tb_un.Text & "', '" & tb_pw.Text & "', 0);"
    8. cmd = New MySqlCommand(query, mysqlconn)
    9. MsgBox(query)
    10. Catch ex As Exception
    11. MsgBox(ex.Message)
    12. Finally
    13. mysqlconn.Dispose()
    14. End Try
    15. End Sub


    Hoffe mir kann geholfen werden :)
    Ahoi,

    deinen MySqlCommand müsstest du auch ausführen. Versuch es mal mit .ExecuteNonQuery, dabei solltest du auch etwas zurückbekommen, was du auswerten kannst. Überigens würde ich dir raten dir mal Sql-Parameter anzuschauen.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de

    greetz90 schrieb:

    query = "INSERT INTO `db_330311_1`.`user` (`ID`, `username`, `password`, `ypoints`) VALUES (NULL, '" & tb_un.Text & "', '" & tb_pw.Text & "', 0);"


    Ist falsch...erstens wird in SQL kein Akzentstrich (´ oder `) verwendet, sondern einfache Hochkommas ( ' ). Shift+#-Taste - also der VB-Kommentar; nur so nebenbei.
    Dein zweiter Fehler ist direkt in der INTO-Klausel: Wenn du wo etwas einfügen wollst, brauchst du den Datenbank-Namen(in deinem Fall db_330311_1) und die Tabelle, die du ansprechen willst (hier user).
    Die bereits genannten Hochkommas werden nur für Werte verwendet (Strings). Wenn du also in Feld User den Wert "Volker" einfügen wollst dann schaut das so aus:
    INSERT INTO datenbank.tabelle (User) VALUES('Volker');

    Also nimm die Akzent-Zeichen bei der Tabellen - und Felderqualifizierung raus und nimm, wie @Manü bereits erwähnt hat die SQLParameter her.

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @Radinator

    Radinator schrieb:

    Ist falsch...erstens wird in SQL kein Akzentstrich (´ oder `) verwendet, sondern einfache Hochkommas ( ' )

    Du gehst von MSSQL aus, hier geht es aber um MySQL und da werden die Apostrophe verwendet, müssen aber nicht zwingend in einer Query mit geschrieben werden. Für die Values verwendet er ja die einfachen Hochkommas.

    @greetz90 Ich überlege auch gerade, ob das ExecuteNonQuery überhaupt bei MySql funktioniert.Versuche es einfach mal mit ExecuteNonQuery die Query auszuführen. Bin mir gerade nicht sicher, ob MySQL Transact ist.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de

    Manü schrieb:

    Du gehst von MSSQL aus,

    Der Unterschied zwischen MSSQL und MySQL ist doch nur der, dass gewisse Befehle in der einen "Sprache"/in den einen Standart enthalten sind und im anderen ned (und umgekehrt)

    Manü schrieb:

    hier geht es aber um MySQL

    s.o.

    Manü schrieb:

    und da werden die Apostrophe verwendet

    was anderes hab ich auch ned gesagt. Ich wollte ihn nur darauf hinweisen, dass er die Akzent-Zeichen weglassen und statdessen Apostrophe verwenden soll

    Manü schrieb:

    müssen aber nicht zwingend in einer Query mit geschrieben werden.

    Wie gesagt ich meinte ja auch nur STATT den Akzentzeichen die Apostrophe

    Manü schrieb:

    Für die Values verwendet er ja die einfachen Hochkommas.

    Ist auch gut so (auch wenn es mit DB-Parametern doch einfacherererer ist ;D

    Radinator schrieb:

    Also nimm die Akzent-Zeichen bei der Tabellen - und Felderqualifizierung raus

    Und nur da!

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    Der Unterschied zwischen MSSQL und MySQL ist doch nur der, dass gewisse Befehle in der einen "Sprache"/in den einen Standart enthalten sind und im anderen ned (und umgekehrt)
    Nope.
    Auch die Syntax unterscheidet sich.
    Während bei MS-SQL Tabellen- und Feldnamen mit eckigen Klammern gequotet werden, verwendet MySQL Backquotes.

    Radinator schrieb:

    Ich wollte ihn nur darauf hinweisen, dass er die Akzent-Zeichen weglassen und statdessen Apostrophe verwenden soll
    Das wäre falsch.
    Entweder er lässt es so wie es ist oder er lässt sie ganz weg, wo es geht.
    Aber es geht vermutlich nicht überall. "user" ist meines Wissens ein reserviertes Element, das gequotet werden muss, wenn es als Tabellenname verwendet wird.
    Und zwar mit Backquotes (das was du Akzent nennst).
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Dann werfe ich auch mal einen Begriff in die Runde - die niedlichen Strichelchen heißen backtick und schaden nicht - im Gegenteil.
    Sie dienen z.B. zum Quoten von Feldnamen, die nicht MySQL-Konform sind.
    Klassiker sind z.B. `select` oder `date` usw. - alles schon gehabt ^^ .
    Kann man übrigens auch alles hier nachlesen: KLICK
    Hi greetz
    so kann es aussehen (ohne Paramter)

    @all
    ist vielleicht überholt, lass mich gerne aufklären, Ich dispose myCnn auch, weil das Schliessen der Verbindung letztlich nicht die ressourcen auf dem Server freigibt?

    VB.NET-Quellcode

    1. Private Sub btnTest_Click(sender As System.Object, e As System.EventArgs) Handles btnTest.Click
    2. Dim myCmd As MySqlCommand = Nothing
    3. Dim myCnn As MySqlConnection = Nothing
    4. Try
    5. myCnn = New MySqlConnection
    6. myCmd = New MySqlCommand
    7. myCmd.Connection = myCnn
    8. myCnn.ConnectionString = Me.DeinConnectionString
    9. myCnn.Open()
    10. '///////////////////////////////
    11. 'so siehst aus ohne Paramter
    12. ' wenn du sehen willst wie es mit paramter geht, gibts hier:
    13. https://www.vb-paradise.de/index.php/Thread/113842-MySQL-Datensatz-in-Tabelle-einf%C3%BCgen/?postID=992655#post992655 '
    14. '//////////////////////////////
    15. strSQl = " INSERT INTO tcustomers (CustomerID, CompanyName, PostalCode)" + _
    16. " VALUES (1006, 'Pascale Cartrain', 6009);"
    17. myCmd.CommandType = CommandType.Text
    18. myCmd.CommandText = strSQl
    19. myCmd.ExecuteNonQuery()
    20. ' Ende ohne ------------------
    21. MessageBox.Show("habe fertig")
    22. Catch ex As MySqlException
    23. myCnn.Close()
    24. MessageBox.Show("" + ex.Message)
    25. Catch ex As Exception
    26. myCnn.Close()
    27. MessageBox.Show("" + ex.Message)
    28. Finally
    29. ' diesmal hab ich finallay kurz gehalten
    30. myCnn.Close()
    31. If TypeOf myCnn Is IDisposable Then
    32. TryCast(myCnn, IDisposable).Dispose()
    33. End If
    34. If Not myCnn Is Nothing Then
    35. myCnn = Nothing
    36. End If
    37. End Try
    38. End Sub
    vermutlich erscheine ich dir voll der Unsympath, aber ich kann mir die Frage nicht verkneifen: Warum unterbreitest du greetz90 so einen Vorschlag?
    Im besten Falle - nämlich wenn er dich vollkommen ignoriert - ist es 100% nutzlos.

    Wahrscheinlicher jedoch ist der schlimmste Fall, nämlich dass greetz90 diese Vorgehensweise sich zumindest teilweise zueigen macht.
    Damit hättest du erreicht, sein aktuelles Programm und alle weiteren, die er evtl. noch schreiben wird, massiv zu gefährden. Sie werden instabil sein (auf anders-sprachigen Rechnern abstürzen), und vor allem kinderleicht angreifbar.

    Und das weißt du doch auch.
    Ist es dein Ziel, zu erreichen, dass mehr angreifbare Software geschrieben wird?
    Mein Fehler war wirklich der den Befehl auszuführen :D
    Und zu den Hochkommas, Apostrophe etc... Bei MySQL ist egal ob man Hochkomma oder Apostroph benutzt, das weiß ich, nur wenn ich zu faul zum schreiben war, hab ich den Befehl einmal in mysql per buttons ausgeführt und dann einfach kopiert deswegen sind da die Apostrophe, benutze selber liebr die Hochkommas wie bei den VALUES :)
    Funktioniert jetzt alles, danke :)

    greetz90 schrieb:

    Bei MySQL ist egal ob man Hochkomma oder Apostroph benutzt

    Wieder falsch.

    greetz90 schrieb:

    Funktioniert jetzt alles, danke

    So lange Du keine Dbparameter benutzt, wird es nur so lange funktionieren, bis Dir der erstbeste Halbnerd im Handumdrehen die ganze Datenbank löscht.

    Was hast Du also gelernt? Nüx. ^^