CSV-File in Datenbank einlesen

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    CSV-File in Datenbank einlesen

    Liebe Community

    Ich bin noch Neuling was das Programmieren angeht, aslo entschuldigt bitte, wenn die Fragen etwas unbeholfen wirken.

    Mein Ziel ist es ein Programm zu schreiben, bei dem nach Eingabe einer ID eine E-Mail-Adresse zurück gegeben wird, mit welcher, sich dann angemeldet werden kann. Zunächst möchte ich hierzu eine Tabelle mit 2 Spalten (CSV) einlesen und als Dataset speichern (Ist das überhaupt sinnvoll?). Die Tabelle enthält hierbei in der ersten Spalte die ID und in der zweiten Spalte die E-Mail-Adresse. Nachdem die Daten importiert wurden soll nun Spalte 1 durchsucht und nach erfolgreichem finden des gesuchten Objektes Spalte 2 zurückgegeben werden.

    Ich hoffe Ihr könnt nun das grobe Setting nachvollziehen.

    Den nachfolgenden Code zum einlesen der CSV-Datei, habe ich mir aus dem Internet zusammengesucht.

    Quellcode

    1. Imports System.Data
    2. Imports System.IO
    3. Imports System.Data.OleDb
    4. Public Class Form1
    5. Dim phlocation As String
    6. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. TextBox1.Text = My.Settings.CSVString
    8. Dim phlocation As String
    9. phlocation = TextBox1.Text
    10. 'Check if the file location is empty
    11. If String.IsNullOrEmpty(phlocation) = True Then
    12. MsgBox("CSV location is not provided. Please provide its location!")
    13. 'If its not empty then go ahead with next phase
    14. Else
    15. 'Divide the dir and filename for ado.net connection and cmd strings.
    16. Dim fileDir = Path.GetDirectoryName(phlocation)
    17. Dim fileNam = Path.GetFileName(phlocation)
    18. 'Process ado.net for csv
    19. Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Text;Data Source=" & fileDir & ""
    20. Dim objConn As New OleDbConnection(sConnectionString)
    21. objConn.Open()
    22. Dim objCmdSelect As New OleDbCommand("SELECT * FROM " & fileNam & "", objConn)
    23. Dim objAdapter1 As New OleDbDataAdapter
    24. objAdapter1.SelectCommand = objCmdSelect
    25. Dim objDataset1 As New DataSet
    26. objAdapter1.Fill(objDataset1, "ID_EMail_Match")
    27. DataGridView1.DataSource = objDataset1.Tables(0).DefaultView
    28. objConn.Close()
    29. End If
    30. End Sub
    31. 'Private Sub button1_click(sender As Object, e As EventArgs) Handles Button1.Click
    32. ' Dim openfiledialog1 As New OpenFileDialog
    33. ' openfiledialog1.InitialDirectory = "c:\"
    34. 'End Sub
    35. Private Sub button1_click(sender As Object, e As EventArgs) Handles Button1.Click
    36. My.Settings.CSVString = TextBox1.Text
    37. My.Settings.Save()
    38. My.Settings.Reload()
    39. phlocation = TextBox1.Text
    40. 'Check if the file location is empty
    41. If String.IsNullOrEmpty(phlocation) = True Then
    42. MsgBox("CSV location is not provided. Please provide its location!")
    43. 'If its not empty then go ahead with next phase
    44. Else
    45. 'Divide the dir and filename for ado.net connection and cmd strings.
    46. Dim fileDir = Path.GetDirectoryName(phlocation)
    47. Dim fileNam = Path.GetFileName(phlocation)
    48. 'Process ado.net for csv
    49. Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Text;Data Source=" & fileDir & ""
    50. Dim objConn As New OleDbConnection(sConnectionString)
    51. objConn.Open()
    52. Dim objCmdSelect As New OleDbCommand("SELECT * FROM " & fileNam & "", objConn)
    53. Dim objAdapter1 As New OleDbDataAdapter
    54. objAdapter1.SelectCommand = objCmdSelect
    55. Dim objDataset1 As New DataSet
    56. objAdapter1.Fill(objDataset1, "ID_EMail_Match")
    57. DataGridView1.DataSource = objDataset1.Tables(0).DefaultView
    58. objConn.Close()
    59. End If
    60. End Sub
    61. End Class


    Dies funktioniert an sich auch, jedoch weiss ich nicht, wie ich das erstellte Dataset durchsuchen kann.

    Weiter ist mir aufgefallen, dass man in VBA auch grafisch Datasets erstellen kann (wäre wahrscheinlich aus Anschaulichkeitsgründen besser). Dies ist mir für ein CSV file jedoch nicht gelungen.

    Ich bedanke mich bereits jetzt für eure Hilfe.

    Grüsse


    Faruman
    ich find das bischen oversized, auf eine 2-spaltige csv mit OleDb und Datasets loszugehen, und dann musste die DataTable immer noch umarbeiten, um die gewünschte Dictionary-Funktionalität zu erhalten.

    Hier kannste glaub einfacher alle Zeilen mit System.IO.File.ReadAllLines() einlesen, dann jede Zeile am Komma splitten, und die den beiden Teilen einem Dictionary(Of String, String) zufügen.

    Ich weiß auch nicht, was du da mit Textbox1 machst.
    Öffne doch einfach die Datei, die in den Settings angegeben ist - eine Textbox brauchste dafür nicht als Zwischenstation.
    Lieber ErfinderDesRades

    Vielen Dank für Deine Antwort.

    Ok dann werde ich dass mal versuchen und melde mich wieder, wenn ich nicht mehr weiter komme.

    Die Textbox, war dazu gedacht, dass man die Quelldatei bei Bedarf noch anpassen kann.

    Nochmals Danke und einen schönnen Samstag Nachmittag


    Faruman
    Habe es nun fertiggestellt und es klappt einwandfrei.

    Hier noch der Code:

    Quellcode

    1. Function Import()
    2. Sub1.TextPfad.Text = My.Settings.Pfad
    3. IDEmail.Clear()
    4. Dim Line As String
    5. Dim word As String()
    6. For Each Line In System.IO.File.ReadAllLines(Sub1.TextPfad.Text)
    7. word = Line.Split(",")
    8. IDEmail.Add(word(0), word(1))
    9. Next
    10. End Function


    Nochmals Danke!


    Faruman

    Faruman schrieb:

    fertiggestellt
    nachdem Du Option Strict On gemacht hast. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!