SQLite eigene Klasse

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von dema.

    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“ ()

    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.
    gibt es da eine Schritt für Schritt Anleitung? ich bekomme es irgendwie nicht hin

    Bei mir kommt die Fehlermeldung

    ​Fehler beim Erstellen der Werkzeugkastenelements von Typ:
    SQLite.Designer.SqLiteDataAdapterToolboxitem,
    Sqllite.designer, Version=1.0.1.11.0, Cuiture=neutral,
    PublicKeyToken=db937bc2d44ff139
    Ich hab das jetzt so gelöst

    Quellcode

    1. Public daten As New System.Data.SQLite.SQLiteDataAdapter
    2. Public tabellen As New DataTable


    Quellcode

    1. daten.SelectCommand = DB_Befehl
    2. daten.Fill(tabellen)


    Währe das so in Ordnung?
    Funktionieren tut es
    Hallo

    Ich möchte lieber den Fehler mit dem SQLiteDataApapter lösen.

    Wie oben schon beschrieben bekomme ich diese Fehlermeldung



    Fehler beim Erstellen der Werkzeugkastenelements von Typ:

    SQLite.Designer.SqLiteDataAdapterToolboxitem,

    Sqllite.designer, Version=1.0.1.11.0, Cuiture=neutral,

    PublicKeyToken=db937bc2d44ff139


    Was muss ich tun das ich die SQLDataAdapter Toolbox verwenden kann?
    Googeln.
    Microsoft ändert ständig am VisualStudio und am Framework was herum, da kommen die SQLite-Hersteller nicht hinterher.
    Und dann fahren zig SQLite-Versionen im INet herum, also ich habs aufgegeben, mit SQLite zu arbeiten.
    Ist schade, weil SQLite ist glaub wirklich ein super-gutes Produkt.

    Naja, so gut nu auch wieder nicht.
    AFAIK kann man SQLite nur als "embedded Database" verwenden, also nur als Datenspeicher einer lokalen Ein-Benutzer-Anwendung.

    Jo, für eine lokalen Ein-Benutzer-Anwendung kann man auch ganz ohne Datenbank auskommen - ein typisiertes Dataset kann sich selbst auch so auf Platte speichern.
    Und ohne typisiertes Dataset sollte man auch keine Datenbank verwenden.

    ErfinderDesRades schrieb:

    Jo, für eine lokalen Ein-Benutzer-Anwendung kann man auch ganz ohne Datenbank auskommen - ein typisiertes Dataset kann sich selbst auch so auf Platte speichern.


    typisiertes Dataset
    Daten laden und speichern
    vier Views-Videos
    codeproject.com/Articles/10309…l-Datamodel-for-Beginners

    Der letzte Link ist am umfänglichsten, weil der erklärt auch, was ein Datenmodell ist, und wie mans macht.
    Weil ohne diese Vorraussetzungen kann ausse Datenbänkerei schoma garnix bei rauskommen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()