CSV in DataGridView laden und nach kontrolle an MySql weitergeben.

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Bernd.

    CSV in DataGridView laden und nach kontrolle an MySql weitergeben.

    Hallo zusammen,
    ich versuche eine CSV Datei in eine DataGridView zu laden. Nach der Sichtkontrolle möchte ich dann die Daten an MySql mit Update übertragen.
    Ich habe im ServerExplorer ein Tabelle in das DataSet gezogen.
    Dann die Tabelle aufs Form platziert.
    Wenn ich nun versuche die Daten per Code in das DataGridView einzufügen, komm eine Fehlermeldung.

    "Zeilen können nicht automatisch zur Zeilenauflistung der DataGridView hinzugefügt werden, wenn das Steuerelement datengebunden ist."

    Ok, vermutlich lacht ihr jetzt.

    Aber wie bekomme ich nun große Daten Mengen von einer CSV Datei in MySql hoch.


    lieben dank
    Bernd
    Hallo ErfinderDesRades,

    vielen dank für den Denkanstoß.
    Klar daran muss mann sich erst gewöhnen. Nun arbeite ich mit DataSet und nicht mehr direkt mit dem DataGridView.
    Und dann geht auch mein vorhaben.
    Alle Daten erst im DGV anzeigen (Sichtkontrolle).
    Dann die Daten, wenn geprüft und korrekt, an MySql weitergeben.

    Hier nun mal das Beispiel für die Nachwelt.

    VB.NET-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    2. Me.Cursor = Cursors.AppStarting
    3. ' Importiert alle Daten aus der CSV in das DataSet und zeigt sie im DGV an.
    4. Dim Lines() As String = IO.File.ReadAllLines(Environment.CurrentDirectory & "\blz.csv", System.Text.Encoding.Default)
    5. For Each Line As String In Lines
    6. Dim Parts() As String = Split(Line, ";")
    7. ' Fügt dem Aktuellen DataSet eine neue Row mit Daten zu.
    8. Dim Dt As DataTable = DataSet1.Tables("Banken")
    9. Dim Row As DataRow = Dt.NewRow
    10. Row("Bank_Kurzbez") = Parts(5)
    11. Row("Bank_Bez") = Parts(2)
    12. Row("Bank_BLZ") = Parts(0)
    13. Row("Bank_PLZ") = Parts(3)
    14. Row("Bank_Ort") = Parts(4)
    15. Row("Bank_PAN") = Parts(6)
    16. Row("Bank_BIC") = Parts(7)
    17. Dt.Rows.Add(Row)
    18. Next
    19. Me.Cursor = Cursors.Default
    20. ' Wenn jetzt UPDATE gemacht wird werden alle Daten an MySql weiter gegeben.
    21. End Sub


    vielen dank
    Bernd
    Ja ich habe die MySql im Server-Explorer.
    da habe ich ja die Tabelle in einen DataSet1 gezogen.
    Dann habe ich aus Datenquellen (rechts) die Tabelle auf das Form1 gezogen.
    Jetzt kann ich mit oben genannten Code, alle Daten in die DataTabel reinholen.
    Sie werden mir dann in der DGV angezeigt. Klicke ich auf Speichern, kommen wirklich alle Datensätze bei MySql an.

    Ist das denn der richtige Weg ?
    Ich verstehe deine Nachfrage nicht ganz.

    Sorry
    Das hier:

    VB.NET-Quellcode

    1. Dim Dt As DataTable = DataSet1.Tables("Banken")
    2. Dim Row As DataRow = Dt.NewRow
    3. Row("Bank_Kurzbez") = Parts(5)
    4. Row("Bank_Bez") = Parts(2)
    5. Row("Bank_BLZ") = Parts(0)
    6. Row("Bank_PLZ") = Parts(3)
    7. Row("Bank_Ort") = Parts(4)
    8. Row("Bank_PAN") = Parts(6)
    9. Row("Bank_BIC") = Parts(7)
    10. Dt.Rows.Add(Row)
    ist doch wieder untypisierter Müll.

    Wenn du eine typisierte DataTable "Banken" hast, kannst du der typisierte Datensätze zufügen - da gibt es die Methode

    VB.NET-Quellcode

    1. Dim newBankenRow=Me.Dataset1.Banken.AddBankenRow(arg1, arg2, ...)
    , die typisierte Parameter entgegennimmt.

    Du solltest mal im ObjectBrowser ausgiebig in deinem typisierten Dataset herumbrowsen, und dichn bischen umschauen, was da alles nützliche Sachen generiert sind.

    Alternativ kannste auch machen:

    VB.NET-Quellcode

    1. Dim tbBanken As DataSet1.BankenDataTable = DataSet1.Banken
    2. dim rwBank=tbBanken.NewBankenRow
    3. rwBank.Bank_Kurzbez = Parts(5)
    4. rwBank.Bank_Bez = Parts(2)
    5. '...
    6. tbBanken.AddBankenRow(rwBank)

    Ich würd übrigens kürzere SpaltenNamen empfehlen, statt "Bank_Kurzbez", "Bank_Bez", "Bank_BLZ",... täte reichen, und wäre besser les und schreibbar: "Kurzbez", "Bez", "BLZ" - denn da diese Dinge nur in der Tabelle Banken existieren, kanns da eh zu keiner Verwechslung kommen.

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

    ErfinderDesRades schrieb:

    ist doch wieder untypisierter Müll.

    das kann gut sein.
    Da ich aber noch garkeine Ahnung habe wie ich überhaupt anfangen soll und welche Möglichkeiten es alles gibt, teste ich mal alles was ich an Code Beispielen finde.
    Leider ist es mit Code Beispielen rar gesät. Selbst bei MSDN ist es schwer etwas zu finden, jedenfalls wenn man noch garnicht weis wonach man überhaupt suchen soll.
    Die Bücher die ich zur Hand habe sind auch am Ziel vorbei geschossen. Leider nur SQL oder Access.
    Kurz knapp und wieder ohne Zusammenhang, jedenfalls für einen DatanBank Einsteiger.
    Auch immer nur ein Beispiel ohne Abweichung.

    ErfinderDesRades schrieb:

    Du solltest mal im ObjectBrowser ausgiebig in deinem typisierten Dataset herumbrowsen, und dichn bischen umschauen, was da alles nützliche Sachen generiert sind.

    Wenn mann weis wonach mann sucht, ist es bestimmt ein lohnenswertes tool. Anonsten nur verwirrend und viel zu viele Informationen.

    ErfinderDesRades schrieb:

    Dim newBankenRow=Me.Dataset1.Banken.AddBankenRow(arg1, arg2, ...)

    Schönes Ding,
    leider bekomme ich wenn ich auf F1 drücke keine Erklärung.
    Somit weis ich nicht was die mit Arg1 wollen. Auch die suche im I-Net bei MSDN und Konsorten kein Ergebnis.

    Public Function NewBankenRow() As Banken_Import.DataSet1.BankenRow
    Member von Banken_Import.DataSet1.BankenDataTable

    Also wieder ein Ansatz ohne Beispiel.
    Und genau das ist schwer nach zu vollziehen. Bedeutet jetzt viel Mühe und Zeit für die Recherche.

    ErfinderDesRades schrieb:

    Alternativ kannste auch machen:

    Diese werde ich mir natürlich auch ansehen.

    ErfinderDesRades schrieb:

    Ich würd übrigens kürzere SpaltenNamen empfehlen,

    Sind wir wieder beim Thema. Wenn man noch garnicht weis wie es weitergeht bzw. was alles Möglich ist.....


    Das mag sich alles Negative anhören.
    Nö,
    sogar Positiv. Nun habe ich wieder Ansätze.
    Weite Möglichkeiten erläutert bekommen.

    Also ne Menge Arbeit liegt vor mir.
    Ich melde mich dann wieder wenn ich garnicht weiter komme.

    lieben dank an dich

    bernd

    Bernd schrieb:

    Schönes Ding,
    leider bekomme ich wenn ich auf F1 drücke keine Erklärung.

    Natürlich findest du inne MSDN keine Dokumentation für generierte Methoden.
    Aber die Methoden sind doch selbsterklärend - da reicht die Info des ObjectBrowsers. ZB bei einer Tabelle

    zB in Most Primitive die DataTable ChildInfoDataTable mit
    Text As String
    Left As Integer
    Top As Integer
    Width As Integer
    Height As Integer
    CreatedAt As Date

    zeigt dir im Objectbrowser diese Add... - Funktion:

    ObjectBrowser schrieb:

    Public Overloads Function AddChildInfoRow(ByVal Text As String, ByVal Left As Integer, ByVal Top As Integer, ByVal Width As Integer, ByVal Height As Integer, ByVal CreatedAt As Date) As MostPrimitive.DataDts.ChildInfoRow
    Member von MostPrimitive.DataDts.ChildInfoDataTable


    Das ist doch vollständig selbsterklärend, welche Argumente diese AddChildInfoRow() - Methode verlangt, da muß man doch nicht F1 drügge, oder?
    habe jetzt genug Stunden damit verbracht.
    Ich finde weder im Objekt Browser Hilfe oder Beispiele (weis ja auch nicht wonach ich suchen soll)
    und auch nicht im I-Net oder meinen Büchern.

    genug zeit verbracht.
    Ich wittme mich nun anderen Methoden die ich finde.
    vlt. hast du im OB bei "Durchsuchen" was anneres eingestellt als "meineProjektmappe", sodaß die grad ausgeblendet wird.

    Da gibts paar weitere Einstellungsmöglichkeiten - u.U. mussteda malnbischen mittm KontextMenü herumspielen
    Bilder
    • AbsolutelyMostPrimitive00.Png

      28,16 kB, 596×229, 219 mal angesehen
    He großer,

    bei mir steht "Eigene Projektmappe"
    und wenn ich die mal gemütlich durchblätter finde ich dann irgendwann
    NewRow() As System.Data.DataRow
    und dann

    Public Function NewRow() As System.Data.DataRow
    Member von System.Data.DataTable
    Zusammenfassung:
    Creates a new System.Data.DataRow with the same schema as the table.

    Rückgabewerte:
    A System.Data.DataRow with the same schema as the System.Data.DataTable.

    so und nu bin ich ein Stück weiter.


    Oder ich suche nach
    AddBankenRow
    und dann kommt auch eine Funktion


    OK, ich glaube nun habe ich mehr verstanden.

    Einfach alles mal in ruhe durchblättern. Und sich freuen wenn da fertiges zeug drin ist.

    Danke das du so geduldig mit mir bist, und mir soviel Hausaufgaben aufgibst.


    vielen lieben danke
    Bernd