Anmeldung mit DataSet

  • VB.NET

Es gibt 43 Antworten in diesem Thema. Der letzte Beitrag () ist von rLz4u.

    Also ich muss sagen, ich war zuerst auch gegen den "Dark-Style" und fands hässlich. Aber mittlerweile find ichs ganz angenehm so. Aber schön ist was Anderes, hast schon recht.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Kein Problem....

    Aber denk daran, dass es alles andere als sicher ist. Wirklich nur einigermaßen sicher ist, wenn Du die Hashes iwo auf einem Server speichert. Die Zugriffe auf den Server sollten auch nur über ein gut durchdachtes PHP-Skript erfolgen. Aber das wurde ja schon gesagt.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich habe jetzt 2 Formulare (Anmeldung und Übersicht aller Benutzer).

    Auf der FrmAnmeldung habe ich 1 TxtBoxUsername & 1 TxtBoxPassword sowie ein LoginButton. Wenn ich dort, und zwar richtiger Weise die Benutzerdaten eingebe, bekomme ich den Fehler, dass der User nicht existiert.

    Muss ich auf das DataSet der Form2 verweisen oder dieses als Datenquelle importieren? ?(
    Du verwendest ja die FrmAnmeldung nur zum Login, oder? Dann kannst Du Dir ja in Deiner FrmAnmeldung ein DataSet erzeugen und die Daten abfragen.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class frmLogin
    3. Private _dS As New UserDataSet
    4. Private _userData As String = "users.xml"
    5. Private Sub frmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. If File.Exists(_userData) Then
    7. _dS.ReadXml(_userData)
    8. End If
    9. End Sub
    10. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Hm, irgendetwas mache ich offensichtlich falsch. ;(
    Bisher habe ich Deine Tipps gut umsetzen können. Nun scheine ich aber etwas falsch gemacht zu haben...

    Übersicht:
    Name des Project
    "UserAccountManagement"

    Name des DataSet
    "f_UserDataSet"

    Name der Table
    "users"

    Name der Startform
    "frmLogin"

    Name der Form, in der das Ds liegt

    "frmMain"


    Der Code in frmLogin:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class frmlogin
    3. Private _dS As New f_UserDataSet
    4. Private _userData As String = "users.xml"
    5. Private Sub frmlogin_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    6. If File.Exists(_userData) Then
    7. _dS.ReadXml(_userData)
    8. End If
    9. End Sub
    10. Private Sub login_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    11. Dim userName As String = Me.TextBox1.Text
    12. Dim password As String = Me.TextBox2.Text
    13. Dim result = From p In frmMain.F_UserDataSet.users Where p.Username = userName Select p
    14. If result.Count = 1 Then
    15. If result(0).IsLockedOff Then
    16. MsgBox("Error:" & vbTab & "This Account has been blocked. Please contact the Administrator.")
    17. Exit Sub
    18. End If
    19. Dim r = frmMain.UsersTableAdapter.ValidateUserNamePassword(TextBox1.Text, TextBox2.Text)
    20. If r Is Nothing Then
    21. MsgBox("Username or Password is wrong!")
    22. Else
    23. 'Hurra, alles passt! :)
    24. 'frmMain.Show()
    25. End If
    26. Else : MsgBox("Error:" & vbTab & "This account does not exist.")
    27. End If
    28. End Sub

    Der Fehler:
    Es wird mir die MsgBox angezeigt, dass der User nicht existiert. Wenn ich aber die frmMain mit Hilfe eines weiteren Button öffne und dann nochmal das Login probieren, funktioniert alles. ?(
    Die .sdf (f_User) liegt auf C:\Users\PC\Documents; die .xsd (f_UserDataSet) liegt auf C:\Users\PC\Documents\Visual Studio 2010\Projects\UserAccountManagement\UserAccountManagement. :)

    Eine "users.xml" habe ich somit nicht. Ich dachte, damit würde die Table bezeichnet? :S
    Ähh, nein. Ich dachte, das wäre logisch.

    In "users.xml" sind die UserInformationen eben nicht in einer Datenbank gespeichert, sondern in ner XML-Datei. Für ein DataSets ists egal, woher die Daten kommen, da ist mir XML lieber, solange es nicht zehntausende von Datensätzen sind.

    Also musst Du da selber ran. Das Prinzip ist doch das Gleiche.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich habe jetzt 2 Forms, die eine zur Anmeldung und die andere, um die Zugangsdaten anzuzeigen.

    Bei beiden gleich:

    VB.NET-Quellcode

    1. Private _userData As String = "users.xml"
    2. Private Sub frmU_Control_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. Me.OUserDtSet.ReadXml(_userData)
    4. 'bzw
    5. frmControl.OUserDtSet.ReadXml(_userData)
    6. End Sub


    Problem:
    Wenn ich Anmeldemaske offen habe und die Übersicht danach per ButtonClick öffne, kommt es zu einer ConstraintException. ?( "Einschränkungen konnten nicht aktiviert werden. Mindestens eine Zeile enthält Werte die die Einschränkungen non-null, unique or foreign-key verletzen."
    Dann hast du entweder Datensalat oder das Pech, dass in deim Dataset die Tabellen in der falschen Reihenfolge abgespeichert sind.
    probierma vorm laden Dataset.EnforceConstraint=False zu setzen, und es anschließend wieder zu aktivieren.
    oder noch besser: gugge die mit ziemlich vielen Wassern gewaschenen Lade-Methode von Phonebook
    Wenn Du meinen Beispielcode verwendest, wie ich ihn ein paar Beiträge weiter hinten gepostet habe, dann musst Du Dir darüber im Klaren sein, dass ein UserName nur 1x vorkommen darf, da ich davon ausgehe, dass UserNames Unique sein sollen. Darum, wenn Du mehrere gleiche UserNames zulasssen willst, musst Du im DataSet die Column UserName Unique=False stellen.

    Ich glaube Dir aber auch gesagt zu haben, dass es Beispielcode ist und Du ihn nur als einen Anhaltspunkt nehmen sollst.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    ErfinderDesRades schrieb:

    Dataset.EnforceConstraint=False
    Ich werde es ausprobieren und mich melden.... :)

    @SpaceyX
    Selbstverständlich habe ich den Code nur als Anhaltspunkt genutzt. Auch ist das DataSet richtig eingestellt. Jeder Benutzername soll nur einmal vorkommen, deshalb habe ich auch dahingehend bereits "Username" auf Unique = True gesetzt gehabt. ;)


    Der Fehler tritt halt nur auf, wenn ich die .xml ein 2. Mal aufrufe, während noch das LoginForm offen ist... ;(
    Warum solltest Du das .xml 2x in das selbe DataSet laden? Dann ists ja klar, dass dieser Fehler auftritt. Zum Login brauchst Du ja nur die Logindaten. Frag diese ausm DataSet ab. Klappt der Login, dann verwirf das DataSet und lad die .xml in ein neues oder übergib das DataSet aus der Login-Form an die Form, die die UserDaten verwaltet.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Die .xml lade ich so in das LoginForm

    VB.NET-Quellcode

    1. Private _userData As String = "users.xml"
    2. Private Sub frmU_Control_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. Me.OUserDtSet.ReadXml(_userData)
    4. End Sub


    Ich habe gedacht, um das DataSet zu übergeben, dass ich in der neuen Form ebenfalls den o.g. Code ins LoadEvent eintragen muss. ?(
    Nun merke ich gerade, dass das ziemlicher Blödsinn ist. :thumbsup:
    Was ich aber gerade bemerke....

    Wenn ich eingeloggt bin und auf alle Benutzerdaten zugreife, die Form schließe und erneut öffne, ist das DataSet leer. ?( Starte ich das gesamte Projekt erneut, ist das DataSet beim erstmaligen Aufruf wieder gefüllt, bei jedem weiteren Aufruf leer... 8|
    Wenn Du die Verwaltungsform schliesst, dann landest Du wieder bei der Login-Form. Sehe ich das richtig?

    Naja, dann darfste eben die Login-Form nicht wirklich schliessen, sondern nur verstecken... ODER....

    Du erzeugst ne neue Login-Form, welche dann wieder die Daten aus der .xml liest und dann beginnt dieses Spiel wieder von vorne. ALTERNATIV....

    kannst Du auch im einen überladenen Konstruktor in der Login-Form anlegen, welcher wieder ein DataSet übernimmt....

    So viele Möglichkeiten, ich würd die Login-Form nicht schliessen, sondern nur verstecken....
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich würde später die LoginForm verstecken (hide). :) Im Moment ist sie als aktive Form vorhanden. Die Form2 die ich öffne, enthält nur das MenuStrip. Wenn ich diese schließe, dann habe ich ja nur noch die aktive Login Form. Das Wiedereinloggen, um zur Form2 zu kommen, klappt wunderbar.

    Nun befindet sich aber in Form2 ein MenuItem, welches eine weitere Form öffnet. Wenn diese wieder geschlossen wird, ist die LoginForm aktiv und Form2. Öffne ich wieder die Form über das MenuItem, in der die Daten gespeichert sind, ist das DataSet leer.... :(

    Das komische ist auch, dass beim 1. Mal Öffnen der Verwaltungsform, alle Datensätze 2x vorhanden sind und danach halt gar nicht mehr....


    Klickpfad:
    LoginForm -> FrmMain -> MenuItem -> Verwaltungsform

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