Frage zu Dieser Klasse (MySQL Laggt)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 42 Antworten in diesem Thema. Der letzte Beitrag () ist von JoeyPlayzTV.

    Frage zu Dieser Klasse (MySQL Laggt)

    Hey Liebe Community wie kann ich diese Klasse besser die Methode Login() wie kann ich die in einem Anderen Thread ausführen oder ist Thread hier überhaupt sinnvoll bzw gehen die Events auch aus einem Thread herraus?



    VB.NET-Quellcode

    1. Imports MySql.Data
    2. Imports MySql.Data.MySqlClient
    3. Public Class LoginManager
    4. Private mysqlcon As New MySqlConnection
    5. Private _Mepassword As String = ""
    6. Private _Meuserid As String = ""
    7. Private _Meusername As String = ""
    8. Private _Medevperms As Integer = 0
    9. ''' <summary>
    10. ''' Dieses Event wird ausgelöst, wenn ein Falsches Passwort angegeben wurde.
    11. ''' </summary>
    12. Public Event WrongPasswordEvent()
    13. ''' <summary>
    14. ''' Dieses Event wird ausgelöst, wenn der Benutzer nicht existiert.
    15. ''' </summary>
    16. Public Event UnknownUserEvent()
    17. ''' <summary>
    18. ''' Dieses Event wird ausgelöst, wenn ein Login erfolgreich war.
    19. ''' </summary>
    20. Public Event LoginSuccessEvent()
    21. ''' <summary>
    22. ''' Dieses Event wird ausgelöst, wenn sich ein gesperrter Benutzer einloggt.
    23. ''' </summary>
    24. Public Event UserBannedEvent()
    25. Private Sub InizalizeConnection()
    26. Hier Wird das MySql Passwort Verschlüsselt an die Connection übergeben
    27. End Sub
    28. ''' <summary>
    29. ''' Diese Methode, meldet einen Benutzer an.
    30. ''' </summary>
    31. ''' <param name="_username">Der Benutzername des Benutzers.</param>
    32. ''' <param name="_password">Das Passwort des Benutzers.</param>
    33. Public Sub Login(_username As String, _password As String)
    34. InizalizeConnection()
    35. mysqlcon.Open()
    36. If UserExists(_username) Then
    37. mysqlcon.Close()
    38. mysqlcon.Open()
    39. If Not CheckIsBanned(_username) = 1 Then
    40. mysqlcon.Close()
    41. mysqlcon.Open()
    42. DownloadUserdata(_username)
    43. mysqlcon.Close()
    44. If _password = _Mepassword Then
    45. My.Settings.login_status = True
    46. My.Settings.user_name = _username
    47. My.Settings.user_id = _Meuserid
    48. My.Settings.dev_perms = _Medevperms
    49. My.Settings.Save()
    50. My.Settings.Reload()
    51. RaiseEvent LoginSuccessEvent()
    52. Else
    53. RaiseEvent WrongPasswordEvent()
    54. End If
    55. Else
    56. RaiseEvent UserBannedEvent()
    57. mysqlcon.Close()
    58. End If
    59. Else
    60. RaiseEvent UnknownUserEvent()
    61. mysqlcon.Close()
    62. End If
    63. End Sub
    64. Private Sub DownloadUserdata(_username As String)
    65. Try
    66. Dim mysqlcmd As New MySqlCommand
    67. mysqlcmd = mysqlcon.CreateCommand
    68. mysqlcmd.CommandText = "SELECT * FROM tb4_accounts WHERE user_name='" + _username + "'"
    69. Dim mysqlreader As MySqlDataReader = mysqlcmd.ExecuteReader
    70. While mysqlreader.Read
    71. _Mepassword = mysqlreader("user_password")
    72. _Meuserid = mysqlreader("user_id")
    73. _Medevperms = mysqlreader("dev_perms")
    74. End While
    75. mysqlcmd.Dispose()
    76. mysqlreader.Close()
    77. Catch ex As Exception
    78. MsgBox("Es ist ein Fehler beim abrufen der Benutzerdaten aufgetreten.", MsgBoxStyle.Critical, "TrackBoard 4 - Anmelden")
    79. End Try
    80. End Sub
    81. Private Function CheckIsBanned(_username As String) As Integer
    82. Try
    83. Dim _isBanned As Integer = 0
    84. Dim mysqlcmd As New MySqlCommand
    85. mysqlcmd = mysqlcon.CreateCommand
    86. mysqlcmd.CommandText = "SELECT * FROM tb4_accounts WHERE user_name='" + user_name + "'"
    87. Dim mysqlreader As MySqlDataReader = mysqlcmd.ExecuteReader
    88. While mysqlreader.Read()
    89. _isBanned = mysqlreader("acc_bannned")
    90. End While
    91. Return _isBanned
    92. mysqlcmd.Dispose()
    93. mysqlreader.Close()
    94. Catch ex As Exception
    95. MsgBox("Es ist ein Fehler beim Prüfen der Benutzerdaten aufgetreten.", MsgBoxStyle.Critical, "TrackBoard 4 - Anmelden")
    96. Return 0
    97. End Try
    98. End Function
    99. Private Function UserExists(_username As String) As Boolean
    100. Try
    101. Dim mysqlcmd As New MySqlCommand
    102. mysqlcmd = mysqlcon.CreateCommand
    103. mysqlcmd.CommandText = "SELECT * FROM tb4_accounts WHERE user_name='" + _username + "'"
    104. Dim mysqlreader As MySqlDataReader = mysqlcmd.ExecuteReader
    105. Return mysqlreader.Read
    106. mysqlcmd.Dispose()
    107. mysqlreader.Close()
    108. Catch ex As Exception
    109. MsgBox("Es ist ein Fehler beim Prüfen des Benutzernamens aufgetreten.", MsgBoxStyle.Critical, "TrackBoard 4 - Anmelden")
    110. Return False
    111. End Try
    112. End Function
    113. End Class


    Bin für jede Antwort sehr dankbar

    *Topic verschoben*
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Kurz, da vom Handy:
    Nicht jede Abfrage einzeln, du generiert ja Roundtrips ohne Ende.
    Benutze SQL Parameter, Stichwort SQL-Injection
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Sql Parameter meinst Du

    VB.NET-Quellcode

    1. sqlcmd.Parameters:AddWithValue("@test", Object)
    Aber es laggt ja dann immer noch wie Bekomme ich das In einem Neuen Thread?

    Kannst du mir helfen wie würdest du es machen?
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

    JoeyPlayzTV schrieb:

    VB.NET-Quellcode

    1. mysqlcmd.CommandText = "SELECT * FROM tb4_accounts WHERE user_name='" + user_name + "'"
    Was genau passiert denn, wenn ich als Benutzernamen Trade; DROP TABLE tb4_accounts;-- habe? Davon abgesehen, dass da ein Semikolon fehlt.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Dann löschst du meine DB aber ich habe es jetzt gefixxxt vielen dank für den Hinweis wieder was gelernt Habe es jetzt mit parametern gemacht

    Hier das Gefixxte

    VB.NET-Quellcode

    1. Private Sub DownloadUserdata(_username As String)
    2. Try
    3. Dim mysqlcmd As New MySqlCommand
    4. mysqlcmd = mysqlcon.CreateCommand
    5. mysqlcmd.CommandText = "SELECT * FROM tb4_accounts WHERE user_name=@username"
    6. mysqlcmd.Parameters.AddWithValue("@username", _username)
    7. Dim mysqlreader As MySqlDataReader = mysqlcmd.ExecuteReader
    8. While mysqlreader.Read
    9. _Mepassword = mysqlreader("user_password")
    10. _Meuserid = mysqlreader("user_id")
    11. _Medevperms = mysqlreader("dev_perms")
    12. End While
    13. mysqlcmd.Dispose()
    14. mysqlreader.Close()
    15. Catch ex As Exception
    16. MsgBox("Es ist ein Fehler beim abrufen der Benutzerdaten aufgetreten.", MsgBoxStyle.Critical, "TrackBoard 4 - Anmelden")
    17. End Try
    18. End Sub


    Könnt ihr mir helfen das In einem Anderen Thread auszuführen bzw werden die EVENTS auch Threadübergreifend gedingst?
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

    Es ist in 34ms erledigt das problem ist ich will dem user solange das läd ne Progressbar mir Marquee anzeigen und das geht nicht wenn die GUI hängt wie bekomme ich das hin das die GUI net hängt
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

    Ja das stimmt aber wie Könnte man es realisieren? das das mySQL nicht rumlaggt
    mein sinn daran ist das wenn es mal etwas länger dauert sei es durch Langsames internet USW will ich anzeigen das etwas in arbeit ist
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

    JoeyPlayzTV schrieb:

    Es ist in 34ms erledigt ... ich will dem user solange das läd ne Progressbar ... anzeigen
    Ein ProgressBar, die in 34 ms vorbei ist.
    Du musst gute Augen haben ;)

    Wenn du auf solche Optik stehst, mach einen Fake-ProgressBar, der mindestens 500 ms läuft.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Kann mir trotzdem jemand sagen wie ich es umsetze

    Selbst die Fake ProgressBar geht nicht weil die GUI hängt ich will nicht das die GUI hängt wie umgehe ich das hängen der GUI

    Ich habe es nochmal nachgemessen es dauert ungefähr 5 Sekunden bis die Meldung kommt Erfolgreich eingeloggt
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

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

    JoeyPlayzTV schrieb:

    wie bekomme ich das hin das die GUI net hängt

    Suche nach Async/await, damit kannste das machen. Ist halt tricky bis man weiß was man wie machen muss. Events gehen damit auch.
    "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
    So ungefähr kann man das machen. Habs aus dem Kopf geschrieben....

    Private Async Sub DoStuff()
    Await Task.Run(AddressOf MoreAwesomStoff)
    End Sub

    Private Sub DoMoreAwesomStoff()
    'zeitintensiver Code hier
    End Sub
    "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
    Ägnliches steht doch auch in dem Link was @ErfinderDesRadesdir geschrieben hat... Haste nicht angeschaut oder? :-/
    "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
    Doch geschaut habe ich aber nicht durchgeblickt musste ein bisschen runter scrollen

    Noch eine Frage wie übergebe ich bei AddressOf mehere Parameter zb Username, password

    Kann ich dann statt AddressOf einfach Sub () nehmen
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!

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

    Wenn du die Frage stellst hast du den Link nun wirklich nicht angeschaut.... Geh nochmal dort hin
    und schaue genau nach.. nicht nur runterscrollen nach kopierbaren Code sondern Lesen & Verstehen
    dann solltest du schnell auf die Lösung kommen.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Ich kopiere keinen Code. Ich finde es eine Frechheit, das hier jedem vorgeworfen wird Code zu kopieren. Und selbst wenn, ist das doch das Problem des jenigen der kopiert, wenn er den Code nicht Versteht. Ich habe lediglich gefragt, ob ich mit "Sub()" mehrere Parameter verwenden kann. Eine ganz einfache Antwort, währe JA oder NEIN. Aber anscheinend bist du nicht in der Lange, eine Frage zu erkennen und zu beantworten.

    Danke an ErfinderDesRades und MrMo diese beiden konnten mir wirklich extrem weiter helfen.
    Meine Programme
    TrackBoard 4 Music-Player Software
    Download:
    Klicke hier!