Import CSV in SQLite mit VB.net

  • VB.NET

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

    Import CSV in SQLite mit VB.net

    Hallo,
    Ich habe eine Frage und hoffe, dass mir geholfen werden kann.
    Ich erstelle eine Programm mit Visual Basic und will eine CSV-Datei in eine SQLite-Datenbank einlesen.
    Ich habe dazu diesen Link gefunden:
    stackoverflow.com/questions/26…-file-into-sqlite-c-sharp
    Der Kode ist in C#, ich habe ihn in VB umgeschrieben.

    VB.NET-Quellcode

    1. Public Sub LoadCheckFiletoDatabase(ByVal checkFilePath As String)
    2. Dim tempTable As DataTable = GetDataTableFromCsv(checkFilePath)
    3. For Each DataR As DataRow In Me.memDataTable.Columns
    4. Dim Dic As Dictionary(Of String, Object) = New Dictionary(Of String, Object)()
    5. For Each DataCol As DataColumn In Me.memDataTable.Columns
    6. Dim field As String = DataCol.ColumnName.ToString()
    7. Dim value As Object = CStr(DataR(DataCol).ToString())
    8. Dic.Add(field, value)
    9. Next
    10. Using sQLiteConnection As SQLiteConnection = New SQLiteConnection("data source=" & databasepath)
    11. Using sQLiteCommand As SQLiteCommand = New SQLiteCommand(sQLiteConnection)
    12. Dim sQLiteHelper As System.Data.SQLite.SQLiteHelper = New SQLiteHelper(sQLiteCommand)
    13. sQLiteHelper.BeginTransaction()
    14. sQLiteHelper.Insert(tempTable.TableName, Dic)
    15. End Using
    16. Public Shared Function GetDataTableFromCsv(ByVal path As String) As DataTable
    17. Dim pathOnly As String = Path.GetDirectoryName(path)
    18. Dim fileName As String = Path.GetFileName(path)
    19. Dim sql As String = "SELECT * FROM [" & fileName & "]"
    20. Using connection As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & pathOnly & ";Extended Properties=""Text;HDR=" & "Yes" & """")
    21. Using command As OleDbCommand = New OleDbCommand(sql, connection)
    22. Using adapter As OleDbDataAdapter = New OleDbDataAdapter(command)
    23. Dim dataTable As DataTable = New DataTable()
    24. dataTable.Locale = CultureInfo.CurrentCulture
    25. adapter.Fill(dataTable)
    26. dataTable.TableName = fileName.TrimEnd(New Char() {"."c, "c"c, "s"c, "v"c})
    27. Return dataTable
    28. End Using
    29. End Using
    30. End Using

    Ich verstehe ihn insofern, mir berietet aber Zeile 16 Probleme.

    VB.NET-Quellcode

    1. System.Data.SQLite.SQLiteHelper

    Ich verwende System.Data.SQLite, das kennt diesen Befehl nicht. Ist dies eine gesonderte Bibliothek, wenn ja, wo kann ich diese Finden und geht dies auch in VB.?
    Wie gesagt, ich möchte CSV-Dateien in eine SQLite-Datenbank importieren.
    Es geht auch mit sqlite3.exe, aber das Programm soll auf mehreren verschiedenen Rechnern funktionieren, da stelle ich es mir schwer vor, einen genauen Pfad anzugeben, wie auch in dem Link beschrieben.
    Theoretisch müsste ich:
    1. die CSV öffnen
    2. die oberste Zeile mit den Spaltennahmen löschen
    3. jede Zeile einzeln auslesen
    4. dies in SQLite übertragen.
    Da SQLite anscheinend kein "Bulk-Insert" kann, muss 3. und 4. als Schleife erfolgen.
    Soweit die Theorie.
    Ich bin blutiger Anfänger und habe keinerlei Idee, wie ich das als Kode umsetzen soll. Hat jemand dafür ein Beispiel, möglichst in VB.net, ich habe trotz mehrstündiger Suche nicht gefunden. Oder kann mir jemand einen Tipp geben, wie es anders gehen soll. Wie gesagt, ICh bin blutiger Anfänger und für jede art von Hilfe sehr dankbar.

    scherze3 schrieb:

    Ist dies eine gesonderte Bibliothek, wenn ja, wo kann ich diese Finden
    Kannst du per nuget deinem Projekt hinzufügen.
    Wobei ich glaube, das ist überflüssig.
    BeginTransaction ist auch in SQLite.net enthalten.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    ich hab kurz gegoogelt und fund: codeproject.com/Articles/746191/SQLite-Helper-Csharp
    Ob das Dingens irgendwas taugt, k.a..
    Täte empfehlen, erstmal zu versuchen, ohne das auszukommen.

    Jo - nochmal geguckt, und bisserl komischen Code gefunden:

    C#-Quellcode

    1. private List<SQLiteParameter> GetParametersList(Dictionary<string, object> dicParameters)
    2. {
    3. List<SQLiteParameter> lst = new List<SQLiteParameter>();
    4. if (dicParameters != null)
    5. {
    6. foreach (KeyValuePair<string, object> kv in dicParameters)
    7. {
    8. lst.Add(new SQLiteParameter(kv.Key, kv.Value));
    9. }
    10. }
    11. return lst;
    12. }
    Ist Fehlerfrei, blos sowas kann man doch mit Linq in einer Zeile formulieren.