Daten von Form in MySQL-Server einfügen

  • VB.NET

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

    Daten von Form in MySQL-Server einfügen

    Hi @ all,


    ich habe ein neues Problem mit meinem Code, ich habe vor mit einer meiner Forms einen neuen "Account" in meiner MySQL-Datenbank zu erstellen, aber ich scheitere fürchterlich :D

    ich habe meinen Code soweit fertig, aber ich habe ein Problem beim versenden der Daten, hier ist der code:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim MysqlConnection As MySqlConnection
    3. user_name = Me.TextBox1.Text
    4. user_vorname = Me.TextBox2.Text
    5. user_nachname = Me.TextBox3.Text
    6. user_password = Me.TextBox4.Text
    7. user_birthday = Me.TextBox5.Text
    8. user_mail = Me.TextBox6.Text
    9. MysqlConnection = New MySqlConnection
    10. MysqlConnection.ConnectionString = "server= *;Database= *; user= *; password= *"
    11. Try
    12. MysqlConnection.Open()
    13. MsgBox("Verbindung zur Datenbank hergestellt!", MsgBoxStyle.Information, "Erfolg")
    14. Catch myerror As MySqlException
    15. MsgBox("Verbindung zur Datenbank konnte nicht hergestellt werden" & vbCrLf & myerror.Message, MsgBoxStyle.Information, "Erfolg")
    16. End Try
    17. Dim myadapter As New MySqlDataAdapter
    18. Dim sqlquary = "INSERT INTO *(`user_name`, `user_vorname`, `user_nachname`, `user_password`, `user_birthdate`, `user_mail`) VALUES (" & user_name & "," & user_vorname & "," & user_nachname & "," & user_password & "," & user_birthday & "," & user_mail & ")"
    19. Dim Command As New MySqlCommand
    20. Command.Connection = MysqlConnection
    21. Command.CommandText = sqlquary
    22. myadapter.SelectCommand = Command
    23. Dim mydata As MySqlDataReader
    24. mydata = Command.ExecuteReader
    25. MsgBox("Sie wurden erfolgreich angemeldet!", MsgBoxStyle.OkOnly, "!")
    26. If MsgBoxResult.Ok Then
    27. Anmeldeformular.Show()
    28. End If
    29. End Sub


    kann mir jemand helfen!
    Erstmal ein dringender Hinweis: SQL-Statements sind besser zu verstehen und zu lesen wenn sie formatiert sind.

    Sowas hier:

    [MySQL]
    Dim sqlquary = "INSERT INTO *(`user_name`, `user_vorname`, `user_nachname`, `user_password`, `user_birthdate`, `user_mail`) VALUES (" & user_name & "," & user_vorname & "," & user_nachname & "," & user_password & "," & user_birthday & "," & user_mail & ")"[/MySQL]

    Ist eigentlich ein NoGo wenn man von Fremden Hilfe haben will ... es erschwert den Hilfegebenden und Dir auch selber das SQL-Statement schnell zu erfassen und zu kontrollieren.

    Besser so (und bereits korrigiert ;) :(

    [MySQL]
    Dim sqlquary = "INSERT INTO " & _
    "DeinenTabellenNamenEinfügen (" & _
    " user_name, " & _
    " user_vorname, " & _
    " user_nachname, " & _
    " user_password, " & _
    " user_birthdate, " & _
    " user_mail) " & _
    "VALUES ( " & _
    "'" & user_name & "'," & _
    "'" & user_vorname & "'," & _
    "'" & user_nachname & "'," & _
    "'" & user_password & "'," & _
    "#" & Cdate(user_birthday).ToString(yyyy-MM-dd) & "#," & _
    "'" & user_mail & "')"[/MySQL]

    Fehler waren:

    - Du hast den Tabellennamen vergessen anzugeben
    - * hat nichts in einer Insert Into Anweisung zu suchen
    - Die Column-Names waren in Hochkommas gesetzt was nicht funktioniert, da nur Text-Werte die an Columns übergeben werden in Hochkommas gesetzt werden
    - Für die Text-Werte die Hochkommas vergessen
    - Den Datumswert nicht passend formatiert und auch nicht in die passenden # Literale gesetzt

    Beachte: Die Syntax ist nur richtig, wenn alle Fields bis auf user_birthday in der DB einen Text-Datentyp haben.

    Gruß

    Rainer
    @oberer Post
    joa, das passt so, aber gibt es hierfür noch einen anderen befehl bzw. einen befehl der zum schreiben gedacht ist?:

    VB.NET-Quellcode

    1. Dim mydata As MySqlDataReader
    2. mydata = Command.ExecuteReader


    Da bekomme ich nämlich immer ne Fehlermeldung^^
    Okay ... poste mal ein Bild vom dem Teil des Codes in dem Du das SQL-Statement (bitte komplett) in die Variable sqlquary (bitte änder das doch mal ab und in sqlquery ... das tut weh in den Augen ;) ) eingefüllt wird.

    Es gibt irgendwo in der SQL-Syntax einen Fehler ... aber ich bin mir recht sicher das ich keinen drinnen habe.

    Oder es gibt ein Field nicht in der Tabelle, bzw. ein Datentyp ist nicht Text. Prüfe das mal durch bitte.


    ps: war nur n scherz!


    Ich bin zwar älter, aber noch nicht so verkalkt das ich keine Scherze mehr erkenne. :D

    Gruß

    Rainer
    Hhmmmm ... probiere mal bitte folgendes:

    Wandel diesen Part

    [MySQL]
    "#" & Cdate(user_birthday).ToString(yyyy-MM-dd) & "#," & _[/MySQL]

    ab zu

    [MySQL]
    "Str_To_Date('" & user_birthday & "', '%d,%m,%Y')," & _[/MySQL]

    Das ist jetzt MySQL-Dialekt, damit wird die Umwandlung des Datums in SQL konformes Format vom Compiler auf den SQL-Server verlagert.

    Klappt es dann?

    Gruß

    Rainer
    Ach verdammt ... sorry, hab gepennt.

    Es wird in der Fehlermeldung ein Syntax-Error near '' gemeldet, was heisst einer der übergebenen Values hat keinen Wert.

    Aber in der DB hast Du NULL auf NEIN gestellt, was heisst das hier NULL und offensichtliche EMPTY nicht akzeptiert wird.

    Du musst also dafür sorgen das jeder Value einen Inhalt hat. Stell das mal sicher und probiere es dann nochmal aus.

    Gruß

    Rainer
    ich glaube, ihre versteht mich nicht :D

    in meinem Code, steht ja hier:

    VB.NET-Quellcode

    1. Dim mydata As MySqlDataReader
    2. mydata = Command.ExecuteReader


    das es sich um einen Reader handelt, also eine Programmkomponente, die nur zum auslesen bestimmter Stellen benutzt wird und nicht zum einfügen in Tabellen.

    Deshalb hatte ich gefragt, ob es dafür nicht einen anderen Befehl wie MySQLDataWriter gibt.

    Edit: Mit dem Code von raist10 bekomme ich folgenden reproduzierbaren Fehler:

    Quellcode

    1. Incorrect datetime value: '11.11.1111' for function str_to_date

    Wie sollen ich des sonst schreiben?
    Ich glaube Du verstehst nicht richtig, ein INSERT INTO-Statement hat nur eine einzige Funktion: Daten in eine Tabelle zu schreiben.

    Und absetzen tust Du das Ding per SQLCommand mit <Command-Object>.ExecuteNonQuery.

    Aber gut ... jetzt habe ich auch das Mißverständnis, Du willst die Daten gar nicht in die Tabelle schreiben sondern auslesen?

    Wenn ja trete ich Dich für die Verwendung von INSERT INTO. :D


    Incorrect datetime value: '11.11.1111' for function str_to_date


    Hhhmmm ... google mal nach MySQL und str_to_date und Du solltest genug Treffer finden bezüglich der korrekten Syntax. Habe die nur schnell aus dem Kopf raus gehauen, aber MySQL ist nicht gerade meine Stärke. ;)

    Gruß

    Rainer
    Folgender Fehler bei dem Vorschlag von raist10:

    Spoiler anzeigen

    Quellcode

    1. MySql.Data.MySqlClient.MySqlException wurde nicht behandelt.
    2. ErrorCode=-2147467259
    3. Message=You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    4. Number=1064
    5. Source=MySql.Data
    6. StackTrace:
    7. bei MySql.Data.MySqlClient.MySqlStream.ReadPacket()
    8. bei MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int32& insertedId)
    9. bei MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int32& insertedId)
    10. bei MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId)
    11. bei MySql.Data.MySqlClient.MySqlDataReader.NextResult()
    12. bei MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
    13. bei MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
    14. bei Engine.account_eigenschaften2.Button1_Click(Object sender, EventArgs e) in C:\Users\Kai\Documents\Visual Studio 2010\Projects\Engine\Engine\account_eigenschaften2.vb:Zeile 50.
    15. bei System.Windows.Forms.Control.OnClick(EventArgs e)
    16. bei System.Windows.Forms.Button.OnClick(EventArgs e)
    17. bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    18. bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    19. bei System.Windows.Forms.Control.WndProc(Message& m)
    20. bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    21. bei System.Windows.Forms.Button.WndProc(Message& m)
    22. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    23. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    24. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    25. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    26. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    27. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    28. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    29. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    30. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    31. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    32. bei Engine.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    33. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    34. bei System.AppDomain.nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    35. bei System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
    36. bei System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
    37. bei System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
    38. bei System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
    39. bei System.Activator.CreateInstance(ActivationContext activationContext)
    40. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
    41. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    42. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
    43. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    44. bei System.Threading.ThreadHelper.ThreadStart()
    45. InnerException:


    -.-
    Alles so schwer :D

    Edit: Hatte es aber davor auch so probiert :D

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

    Quellcode

    1. insert_into "INSERT INTO Engine_User_all ( user_name, user_vorname, user_nachname, user_password, user_birthdate, user_mail) VALUES ( 'aaaaaaaaaa','ssssssssssss','a1aaaaaa','ssssssssssss',#2012-12-12#,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')" String
    also ich stell dasmal so dar:

    VB.NET-Quellcode

    1. Dim sqls = String.Concat( _
    2. "INSERT INTO Engine_User_all ", _
    3. "( user_name, user_vorname, user_nachname, ", _
    4. "user_password, user_birthdate, user_mail) ", _
    5. "VALUES ( ", _
    6. "'aaaaaaaaaa','ssssssssssss','a1aaaaaa',", _
    7. "'ssssssssssss',#2012-12-12#,'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')")
    Und finden tu ich da eiglich nichts.

    vlt. das Datum: könnte sein, dasses so heißen müsste: #9/11/2001#