Hi,
ich arbeite an meinem ersten Programm mit SQL Verbindung. Wie schließe ich Verbindungen am Besten wenn ich einen Datenbankzugriff in einem Sub benutze? Normalerweise nutze ich xx.Dispose() und xy.Close(). Nun hatte ich ein Sub indem ich ein Exit Sub genutzt hatte. Da ich gelesen habe, dass ein Exit Sub nicht gerade schön ist wurde dies jetzt anders gelöst, geht jedoch trotzdem während einer Abfrage aus dem Sub bzw schließt die aktuelle Form:
Wie zu sehen habe ich jetzt einfach zweimal Dispose und Close genutzt. Bei meinen anderen Subs die "hoffentlich" alle bis zum Ende durchlaufen sollte ist jeweils nur ein Dispose und Close am Ende. z.B.
Gibt es hier eine "beste" Möglichkeit wie z.B. nach jedem Execute ein Dispose oder ähnliches?
Vielen Dank im Voraus,
Departet
ich arbeite an meinem ersten Programm mit SQL Verbindung. Wie schließe ich Verbindungen am Besten wenn ich einen Datenbankzugriff in einem Sub benutze? Normalerweise nutze ich xx.Dispose() und xy.Close(). Nun hatte ich ein Sub indem ich ein Exit Sub genutzt hatte. Da ich gelesen habe, dass ein Exit Sub nicht gerade schön ist wurde dies jetzt anders gelöst, geht jedoch trotzdem während einer Abfrage aus dem Sub bzw schließt die aktuelle Form:
VB.NET-Quellcode
- Private Sub SpeichernBtn_Click(sender As Object, e As EventArgs) Handles SpeichernBtn.Click
- Dim dbConnection As New SQLite.SQLiteConnection()
- Dim dbCommand As SQLiteCommand
- Dim dbReader As SQLiteDataReader
- dbConnection.ConnectionString = "Data Source=users.sqlite3;"
- dbConnection.Open()
- dbCommand = dbConnection.CreateCommand
- dbCommand.CommandText = "SELECT * FROM kunden WHERE rfid = " & RFIDBox.Text & ";"
- dbReader = dbCommand.ExecuteReader()
- If dbReader.Read() Then
- dbReader.Close()
- MsgBox("Kartennummer bereits vorhanden.")
- dbCommand.Dispose()
- dbConnection.Close()
- Else
- dbReader.Close()
- dbCommand.CommandText = "INSERT INTO kunden (rfid) VALUES (" & RFIDBox.Text & ");"
- dbCommand.ExecuteNonQuery()
- dbCommand.Dispose()
- dbConnection.Close()
- Form1.LadeDaten()
- Me.Close()
- End If
- End Sub
Wie zu sehen habe ich jetzt einfach zweimal Dispose und Close genutzt. Bei meinen anderen Subs die "hoffentlich" alle bis zum Ende durchlaufen sollte ist jeweils nur ein Dispose und Close am Ende. z.B.
VB.NET-Quellcode
- Private Sub ContextMenuStrip1_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles ContextMenuStrip1.ItemClicked
- Dim dbConnection As New SQLite.SQLiteConnection()
- Dim dbCommand As SQLiteCommand
- dbConnection.ConnectionString = "Data Source=users.sqlite3;"
- dbConnection.Open()
- dbCommand = dbConnection.CreateCommand
- Select Case e.ClickedItem.ToString()
- Case "Speichern"
- If KdnIDBox.Text.Length > 0 Then
- dbCommand.CommandText = "UPDATE kunden SET usrid = " & KdnIDBox.Text & " WHERE rfid = " & RFIDBox.Text & ";"
- dbCommand.ExecuteNonQuery()
- LadeDaten()
- Else
- MsgBox("Bitte geben Sie eine Kundennummer ein.")
- End If
- Case "Löschen"
- dbCommand.CommandText = "DELETE FROM daten WHERE rfid = " & RFIDBox.Text & ";"
- dbCommand.ExecuteNonQuery()
- dbCommand.CommandText = "DELETE FROM kunden WHERE rfid = " & RFIDBox.Text & ";"
- dbCommand.ExecuteNonQuery()
- Case "Karte hinzufügen"
- Form2.Show()
- End Select
- dbCommand.Dispose()
- dbConnection.Close()
- LadeDaten()
- End Sub
Gibt es hier eine "beste" Möglichkeit wie z.B. nach jedem Execute ein Dispose oder ähnliches?
Vielen Dank im Voraus,
Departet