Announcement

Collapse
No announcement yet.

Passwortabfrage über ADO.NET

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Passwortabfrage über ADO.NET

    Hallo zusammen, möchte über meine Anwendung Benutzer und Passwort in der Datenbank (SQL-Server) abfragen. Habe die Daten auch im DataSet drinstehen, die ich benötige (Test durch DataView erfolgreich). Jetzt stehe ich vor dem Problem, wie ich es schaffe, die Eingaben des Users mit den Daten im DataSet abzugleichen. Wie würde die Abfrage über Rows und Columns der DataTable aussehen ? Anbei einen Auszug aus dem Quellcode...

    'zuerst werden die Eingaben des Benutzers in lokale Variablen
    'gespeichert...
    User = TB_Benutzer.ToString
    Passwort = TB_Passwort.ToString

    'Verbindung zum SQL-Server wird aufgebaut... entsprechend wird eine
    'Abbruchverbindung eingefügt für den Fall, dass die Verbindung fehl-
    'schlägt...
    Try
    SqlConnection1.Open()
    Catch ex As Exception
    MsgBox(ex.Message)
    Finally
    'Die Verbindung zum SQL-Server wird wieder geschlossen...
    SqlConnection1.Close()
    End Try

    'Das DataSet1-Objekt wird mit den Daten aus der Datenbank
    'gefüllt und stehen im Arbeitsspeicher bereit...
    SqlDataAdapter1.Fill(DataSet1, "Anwender")

    'Tabelle wird erzeugt und mit den Daten gefüllt....
    Dim dt As DataTable = DataSet1.Tables.Item("Anwender")

    Danke im voraus.
    Gruss Tilman

  • #2
    Hallo,
    das folgende Beispiel demonstriert eine Alternative, wie diese Aufgabe umgesetzt werden kann. Zum Test fülle ich zuerst die DataSet-Instanz über einen In-Memory-Tabelle: Der Benutzername ist der Primärschlüssel (<i>PrimaryKey</i>) der Tabelle, so dass es garantiert nur einen einzigen Datensatz für diesen Benutzernamen geben kann.
    <pre>
    Private aUserDS As New DataSet
    <br>
    Private Sub ButtonSchritt1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSchritt1.Click
    ' neue DataTable erzeugen
    Dim aUserTbl As New DataTable
    aUserTbl.TableName = "Anwender"
    aUserTbl.Columns.Add("UsrName", GetType(String))
    aUserTbl.Columns.Add("UsrPwd", GetType(String))
    aUserTbl.PrimaryKey = New DataColumn() {aUserTbl.Columns("UsrName")}
    aUserTbl.MinimumCapacity = 10
    ' Testdaten eintragen
    aUserTbl.Rows.Add(New Object() {"Bernd", "geheim"})
    aUserTbl.Rows.Add(New Object() {"Andreas", "geheim2"})
    aUserTbl.Rows.Add(New Object() {"Wolfgang", "geheim3"})
    ' Ergebnis anzeigen
    aUserDS.Tables.Add(aUserTbl)
    DataGrid1.DataSource = aUserDS.Tables("Anwender")
    End Sub
    </pre>
    Die <i>Rows</i>-Kollektion des <i>DataTable</i>-Objekts stellt die Methode <b>Find</b> zur Verfügung, um das DataRow-Objekt zurückzuliefern, dass den gesuchen Primärschlüsselwert besitzt. Wenn die Benutereingabe mit dem DataSet-Inhalt verglichen werden soll, sieht das im Beispiel dann so aus:
    <pre>
    Dim aFindRow As DataRow = aUserDS.Tables("Anwender").Rows.Find(TextBoxUsrNam e.Text)
    If aFindRow Is Nothing Then
    MessageBox.Show("Der Benutzername ist nicht im Bestand.")
    Else
    Dim sPwd As String = aFindRow("UsrPwd")
    If sPwd.Equals(TextBoxUsrPwd.Text) Then
    MessageBox.Show("Das Passwort ist richtig")
    Else
    MessageBox.Show("Das Passwort ist falsch")
    End If

    End If
    </pre>
    Über <b>Find</b> wird nach dem Benutzernamen gesucht. Ist dieser richtig, so ist die <b>DataRow</b>-Instanz mit einem Datensatz gefüllt. Über <i>aFindRow("UsrPwd")</i> wird nun das gespeicherte Passwort ausgelesen, um dieses über <b>Equals</b> mit der TextBox-Eingabe des Anwenders zu vergleichen.
    <br>
    Wenn die Anwender-Tabelle nicht einen geeigneten Primärschlüssel hat, kann zur Filterung des Benutzer-Datendsatzes zum <b>DataView</b> gewechselt werden. Im Gegensatz zur Find-Methode von DataTable sucht die Find-Methode von DataView in der über die <b>Sort</b>-Eigenschaft festgelegten Spalte. Die Fundstelle kann dann über <b>DataRowView</b> ausgelesen werden:
    <pre>
    Dim aDV As DataView = aUserDS.Tables("Anwender").DefaultView
    aDV.Sort = "UsrName"
    Dim iIdx As Integer = aDV.Find(TextBoxUsrName.Text)
    If iIdx <> -1 Then
    Dim aRow As DataRowView = aDV(iIdx)
    MessageBox.Show("Das Passwort ist: " + aRow(1))
    End If
    </pre&gt

    Comment


    • #3
      Herzlichen Dank für die Hilfe... werde dies mal umsetzen und schauen, ob ich es hinbekomme

      Comment

      Working...
      X