Probleme mit der Datenbankanbindung

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Lightsource.

    Probleme mit der Datenbankanbindung

    Hallo,

    ich programmiere gerade ein Programm mit einer Datenbankanbindung. Doch irgendwo sind dort Fehler und ich finde sie nicht...vllt. könnt ihr ja helfen...

    Ich kann die vorhandenen DB Einträge sehen aber mehr auch nicht!

    VB.NET-Quellcode

    1. Public Class frmXenios
    2. Dim con As New OleDb.OleDbConnection
    3. Dim cmd As New OleDb.OleDbCommand
    4. Dim reader As OleDb.OleDbDataReader
    5. Dim pnummer As New ArrayList
    6. Private Sub frmXenios_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. con.ConnectionString = _
    8. "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    9. "Data Source=A:/KABnet/System/KABnet.mdb"
    10. cmd.Connection = con
    11. btnLaden_Click(sender, e)
    12. End Sub
    13. Private Sub btnLaden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLaden.Click
    14. allesehen()
    15. End Sub
    16. Sub allesehen()
    17. Try
    18. con.Open()
    19. cmd.CommandText = "select * from Xenios"
    20. Ausgabe()
    21. Catch ex As Exception
    22. MsgBox(ex.Message)
    23. End Try
    24. con.Close()
    25. txtE_Mail.Text = ""
    26. txtName.Text = ""
    27. txtP_Nummer.Text = ""
    28. txtVorname.Text = ""
    29. txtX_Ereignis.Text = ""
    30. txtX_PW.Text = ""
    31. txtZugang.Text = ""
    32. End Sub
    33. Sub ausgabe()
    34. reader = cmd.ExecuteReader
    35. lstBox_Xenios.Items.Clear()
    36. pnummer.Clear()
    37. Do While reader.Read()
    38. lstBox_Xenios.Items.Add(reader("name") & " | " _
    39. & reader("vorname") & " | " _
    40. & reader("personalnummer") & " | " _
    41. & reader("email") & " | " _
    42. & reader("xeniosereignis") & " | " _
    43. & reader("xeniospasswort") & " | " _
    44. & reader("xenioszugang"))
    45. pnummer.Add(reader("personalnummer"))
    46. Loop
    47. reader.Close()
    48. End Sub
    49. Private Sub btnEinfügen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEinfügen.Click
    50. Dim anzahl As Integer
    51. If txtP_Nummer.Text = "" Then
    52. MsgBox("Bitte mindestens eine " _
    53. & "Personalnummer eingetragen")
    54. Exit Sub
    55. End If
    56. Try
    57. con.Open()
    58. cmd.CommandText = _
    59. "insert into Xenios " & _
    60. "(name, vorname, personalnummer, " & _
    61. " email, xeniosereignis, xeniospasswort," & _
    62. " xenioszugang)" & _
    63. " values (`" & _
    64. txtName.Text & "', '" & _
    65. txtVorname.Text & "', " & _
    66. txtP_Nummer.Text & "', " & _
    67. txtE_Mail.Text & "', " & _
    68. txtX_Ereignis.Text & "', " & _
    69. CChar(txtX_PW.Text) & "', " & _
    70. CDate(txtZugang.Text) & "')"
    71. 'msgbix (cmd.commandtext)
    72. anzahl = cmd.ExecuteNonQuery()
    73. If anzahl > 0 Then
    74. MsgBox("Es wurde ein Datensatz eingefügt")
    75. End If
    76. Catch ex As Exception
    77. MsgBox(ex.Message)
    78. End Try
    79. con.Close()
    80. allesehen()
    81. End Sub
    82. Private Sub lstBox_Xenios_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstBox_Xenios.SelectedIndexChanged
    83. Try
    84. con.Open()
    85. cmd.CommandText = _
    86. "select * from Xenios " _
    87. & "where personalnummer = " _
    88. & pnummer(lstBox_Xenios.SelectedIndex)
    89. reader = cmd.ExecuteReader
    90. reader.Read()
    91. txtName.Text = reader("name")
    92. txtVorname.Text = reader("vorname")
    93. txtP_Nummer.Text = reader("personalnummmer")
    94. txtE_Mail.Text = reader("email")
    95. txtX_Ereignis.Text = reader("xeniosereignis")
    96. txtX_PW.Text = reader("xeniospasswort")
    97. txtZugang.Text = reader("xenioszugang")
    98. reader.Close()
    99. Catch ex As Exception
    100. MsgBox(ex.Message)
    101. End Try
    102. con.Close()
    103. End Sub
    104. Private Sub btnÄndern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnÄndern.Click
    105. Dim anzahl As Integer
    106. If txtP_Nummer.Text = "" Then
    107. MsgBox("Bitte einen Datensatz auswählen " _
    108. & "und mindestens eine Personalnummer " _
    109. & "eintragen")
    110. Exit Sub
    111. End If
    112. Try
    113. con.Open()
    114. cmd.CommandText = _
    115. "update Xenios set " & _
    116. "name = '" & txtName.Text & "', " & _
    117. "vorname = '" & txtVorname.Text & "', " & _
    118. "personalnummer = " _
    119. & txtP_Nummer.Text & ", " & _
    120. "email= = " _
    121. & txtE_Mail.Text & ", " & _
    122. "xeniosereignis = '" _
    123. & txtX_Ereignis.Text & "' " & _
    124. "xeniospasswort = '" _
    125. & txtX_PW.Text & "' " & _
    126. "xenioszugangugang = '" _
    127. & txtZugang.Text & "' " & _
    128. "where personalnummer = " _
    129. & pnummer(lstBox_Xenios.SelectedIndex)
    130. 'MsgBox(cmd.CommandText)
    131. anzahl = cmd.ExecuteNonQuery()
    132. If anzahl > 0 Then
    133. MsgBox("Es wurde ein Datensatz geändert")
    134. End If
    135. Catch ex As Exception
    136. MsgBox(ex.Message)
    137. End Try
    138. con.Close()
    139. allesehen()
    140. End Sub
    141. Private Sub btnLöschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLöschen.Click
    142. Dim anzahl As Integer
    143. If txtP_Nummer.Text = "" Then
    144. MsgBox("Bitte einen Datensatz auswählen")
    145. Exit Sub
    146. End If
    147. If MsgBox("Wollen Sie den ausgewählten " _
    148. & "Datensatz wirklich löschen?", _
    149. MsgBoxStyle.YesNo) = MsgBoxResult.No Then
    150. Exit Sub
    151. End If
    152. Try
    153. con.Open()
    154. cmd.CommandText = _
    155. "delete from Xenios " & _
    156. "where personalnummer = " & _
    157. pnummer(lstBox_Xenios.SelectedIndex)
    158. 'MsgBox(cmd.CommandText)
    159. anzahl = cmd.ExecuteNonQuery()
    160. If anzahl > 0 Then
    161. MsgBox("Es wurde ein Datensatz gelöscht")
    162. End If
    163. Catch ex As Exception
    164. MsgBox(ex.Message)
    165. End Try
    166. con.Close()
    167. allesehen()
    168. End Sub
    169. Private Sub btnSuchen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSuchen.Click
    170. If txtName.Text = "" Then
    171. MsgBox("Bitte einen Such-Namen eintragen")
    172. Exit Sub
    173. End If
    174. Try
    175. con.Open()
    176. cmd.CommandText = _
    177. "select * from Xenios where name like '%" _
    178. & txtName.Text & "%'"
    179. 'MsgBox(cmd.CommandText)
    180. ausgabe()
    181. Catch ex As Exception
    182. MsgBox(ex.Message)
    183. End Try
    184. con.Close()
    185. End Sub
    186. End Class


    [Edit 1] Fehler wurden beschrieben
    Du haste viele hochkommas vergessen. Immer wenn du einen Text in der Datenbank bearbeitest muss ein hochkomma hinten und vorne hin.

    VB.NET-Quellcode

    1. con.Open()
    2. cmd.CommandText = _
    3. "insert into Xenios " & _
    4. "(name, vorname, personalnummer, " & _
    5. " email, xeniosereignis, xeniospasswort," & _
    6. " xenioszugang)" & _
    7. " values ('" & _
    8. txtName.Text & "', '" & _
    9. txtVorname.Text & "', '" & _
    10. txtP_Nummer.Text & "', '" & _
    11. txtE_Mail.Text & "', '" & _
    12. txtX_Ereignis.Text & "', '" & _
    13. CChar(txtX_PW.Text) & "', '" & _
    14. CDate(txtZugang.Text) & "')"


    hier auch

    VB.NET-Quellcode

    1. con.Open()
    2. cmd.CommandText = _
    3. "update Xenios set " & _
    4. "name = '" & txtName.Text & "', '" & _
    5. "vorname = '" & txtVorname.Text & "', '" & _
    6. "personalnummer = '" _
    7. & txtP_Nummer.Text & "', '" & _
    8. "email = '" _
    9. & txtE_Mail.Text & "', '" & _
    10. "xeniosereignis = '" _
    11. & txtX_Ereignis.Text & "', '" & _
    12. "xeniospasswort = '" _
    13. & txtX_PW.Text & "', '" & _
    14. "xenioszugangugang = '" _
    15. & txtZugang.Text & "', '" & _
    16. "where personalnummer = " _
    17. & pnummer(lstBox_Xenios.SelectedIndex)
    Sorry wenn das jetzt bisschen Offtopic ist aber, der Code ist grausam!
    Ein gewirr von con.Close und con.Open und aufruf von funktionen/sub und vorheriger cmd.commandtext deklarationen *BRRR*

    mach bei jedem zugriff auf die Datenbank die Connection auf und dann wieder zu! ist übersichtlicher und hat nur in wenige Fällen einen Nachteil!
    Bei den Sub's allesehen() und ausgabe() übergeb doch einfach das SQL Statement und für dann in der Funktion alles aus warum vorher zuweisen und dann ausführen?!?!?!

    Warum ruft du beim Load das klick event auf?! mach doch eine oder mehrer Funktionen und die ruft du dann beim Form_Load und Click event auf?!

    sieht alles ein bisschen nach zusammenkopiert aus und jetzt keine Ahnung was passiert!

    Also für mich ist das kein sauberer Code!

    Wie Chris213 schon gesagt hat was passiert wenn du es Schritt für Schritt durch Debugst oder geben die Try-Catch was aus?
    Nehmen wir mal an, während des Öffnens deiner Verbindung klappt etwas nicht.
    con.open -> Fehler
    Diesen Fehler fängst du ab mit Catch. Nun ist zu diesem Zeitpunkt deine
    Verbindung aber gar nicht geöffnet worden. Eben weil der Fehler auftrat.
    Anschließend machst du
    con.close
    Wenn die Verbindung jetzt aber nicht offen ist, kannst du sie nicht schließen.

    Ich empfehle dir die beiden Aufrufe in getrennte Subs zu setzen.
    Da du Öffnen und Schließen der Verbindung immer wieder brauchst,
    kannst du die Fehlerbehandlung innerhalb dieser Subs dann eleganter lösen.
    Weiterhin könntest du die Verbindungdaten sogar als Parameter übergeben.