SQLite eigene Klasse

  • VB.NET
  • .NET 4.5

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    SQLite eigene Klasse

    Hallo

    Ich habe mir eine Klasse erstellt für die Datenbank Verbindung und für Speichern, Updaten, Löschen, Auslesen.

    Die Klasse habe ich deswegen gemacht weil in mehrere Formen 15 Stück immer eine Abfrage oder Speichern updaten löschen muss.
    um nicht jedes mal den gleichen Code einzugeben habe ich mir gedacht ich erstelle eine Klasse um dann in die Formen einfach die Klasse aufzurufen.

    Beim Verbinden, Erstellen eine Tabelle, Speichern, Updaten und beim Löschen funktioniert das ganze sehr gut.

    Nur beim Auslesen habe ich jetzt ein Problem und finde keine Lösung oder weiß nicht weiter.

    Beim Auslesen braucht man bei SQLite diese

    Dim sqlreader As System.Data.SQLite.SQLiteDataReader = DB_Befehl.ExecuteReader

    ich kann das nicht auf Public sqlreader As System.Data.SQLite.SQLiteDataReader = DB_Befehl.ExecuteReader machen da es immer diese Fehlermeldung kommt

    Hier schon mal mein Code:

    VB.NET-Quellcode

    1. Public Sub DB_Lesen(Tabellenname As String, Spaltenname As String, Inhalt As String)
    2. DB_Verbindung.Open()
    3. DB_Befehl = DB_Verbindung.CreateCommand
    4. DB_Befehl.CommandText = "SELECT " & Spaltenname & " FROM " & Tabellenname & " WHERE " & Inhalt & ";"
    5. Dim sqlreader As System.Data.SQLite.SQLiteDataReader = DB_Befehl.ExecuteReader
    6. While sqlreader.Read()
    7. SQLLesen = sqlreader(1)
    8. End While
    9. DB_Verbindung.Close()
    10. End Sub


    in dem Form rufe ich das so auf

    VB.NET-Quellcode

    1. Klasse_DB.DB_Lesen("Verzeichnis", "Verzeichnisname, Verzeichnis", "Verzeichnisname = 'Datenbankverzeichnis'")


    Wenn ich nur 1 Textbox auslesen will funktioniert das ganze gut.

    Aber ich möchte nun die ganze Tabelle in einer Datagridview einlesen

    das heißt ich müsste die Klasse anders machen um es dann im Form so auszulesen zu können.

    VB.NET-Quellcode

    1. Klasse_DB.DB_Lesen("CD-Verwaltung", "*", "'")
    2. While sqlreader.Read()
    3. DataGridView1.Rows.Add(SQLreader(0), SQLreader(1), SQLreader(2), SQLreader(3), SQLreader(4), SQLreader(5), SQLreader(6), Land, SQLreader(8), SQLreader(9), SQLreader(10), SQLreader(11), SQLreader(12))
    4. End While


    Ich muss dazu sagen die die Klasse ein Extra Projekt ist und in dem Form Projekt nur ein Verweiß auf die Klasse ist.

    Wie kann man sowas richtig machen?

    Hoffe es kann mir jemand helfen

    Gruß

    dema
    Moin,

    was spricht gegen eine DataTable?
    Das Abrufen jeder einzelnen Zelle über den DataReader ist Mumpitz.

    VB.NET-Quellcode

    1. Dim DT_Data As New Datatable("MeineDaten")
    2. Using Adapter As New SQLiteDataAdapter(Connection, Query)
    3. Adapter.Fill(DT_Data)
    4. End Using
    5. Dim Feld1 As String = ""
    6. If DT_Data.Rows.Count > 0 then
    7. Feld1 = DT_Data.Rows(0)("Feld1").ToString
    8. End If
    9. MessageBox.Show(Feld1)


    Dem DataGridView kannst du über .DataSource = DT_Data auch direkt die komplette DataTable zuweisen.
    DataGridView.Rows.Add ist der falsche Weg.

    Zudem ist dein SQL String anfällig für SQL Injections.
    Soetwas macht man mit CommandParametern

    VB.NET-Quellcode

    1. Dim Query As String = "SELECT " & "@Spaltenname" & " FROM " & "@Tabellenname" & " WHERE " & "Meinfeld" & "=" & "@Inhalt"
    2. Dim DT_Data AS New DataTable(Tabellenname)
    3. Using Adapter As New SQLiteDataAdapter(Query, DB_Verbindung)
    4. With Adapter
    5. With .SelectCommand.Parameters
    6. .AddWithValue("@Spaltenname", Spaltenname)
    7. .AddWithValue("@Tabellenname", Tabellenname)
    8. .AddWithValue("@Inhalt", Inhalt)
    9. End With
    10. .Fill(DT_Data)
    11. End With
    12. End Using


    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „BlueLagoonX“ ()

    Natürlich kannst du es in eine eigene Klasse machen, allerdings ist der SQL String so wie du ihn oben hast, unsicher.

    VB.NET-Quellcode

    1. "SELECT " & Spaltenname & " FROM " & Tabellenname & " WHERE " & Inhalt & ";"


    Schau dir mal im Internet was zu SQL Injections an, dann wirst du sehen was ich meine.

    dema schrieb:

    Ich möchte kein DataAdapter, DataTable oder Dataset benutzen.
    Dann wirst du diese Dinge dir selbst programmieren müssen, weil man braucht sie halt.
    Sowas nennt man "das Rad neu erfinden" - und es ist dringendst davon abzuraten.
    Du kannst da Mannjahre hineinstecken, und es wird immer noch nichts bei rauskommen, was an die Leistungsfähigkeit des vorhandenen Systems auch nur annähernd herankommt.
    Du werkelst da zB derzeit an einem "DataGridView-Adapter".
    Wie aber willst du es schaffen, DatagridviewComboboxColumns bereitzustellen?
    Guck dir mal den Film "JoiningView" an, auf vier Views-Videos. Da kann man glaub sehen, was ich meine.
    Der Satz "Wie fügt man das SQLite in die Datenquelle ein?" ergibt nach meinem Verständnis von SQLite und Datenquelle überhaupt keinen Sinn.
    SQLite ist ein SoftwareProdukt, dass kann man nicht in eine Datenquelle einfügen.

    Einen DataAdapter erstellt man - wie letztlich alle Objekte - mit dem Schlüsselwort New.
    Willst du mit SQLite arbeiten, musst du dir wohl einen SQLiteDataAdapter erstellen.
    Sollte Bestandteil deiner SQLite.dll sein.