Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[.NET] CSV naar datatable naar tabel in database

Pagina: 1
Acties:
  • 275 views sinds 30-01-2008
  • Reageer

  • Zoufiax
  • Registratie: Augustus 2003
  • Laatst online: 29-03-2024
Ik wil een CSV-bestand inlezen, nieuwe records toevoegen aan een MySQL-tabel, en gewijzigde records wijzigen in diezelfde tabel. Het CSV-bestand heeft dezelfde velden als de betreffende tabel.

Ik ben inmiddels zover dat ik een datatable heb met daarin het ingelezen CSV-bestand. Daarnaast open ik via een MySQL-dataset een datatable die de tabel in de MySQL-database representeert. Vervolgens voeg ik nieuwe regels toe aan deze laatste datatable, en wijzig ik wat er volgens de CSV-file gewijzigd moet worden.

Het probleem is nu dat de wijzigingen in de datatable niet worden opgeslagen in de MySQL-tabel. Weet iemand hoe ik dat voor elkaar moet krijgen? Hier volgt een deel van de code (met fake namen voor de database, tabel etc.).
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   Dim dtcsv As DataTable = DelimitedTextToTableSR(strDoelPadnaam, ";", True, False)

   Dim ds As DataSet = New DataSet
   Dim con As New MySqlConnection("Data Source=dedatabaseserver;User Id='.........';Password='.........';Database='dedatabase'")
   Dim da As MySqlDataAdapter = New MySqlDataAdapter("select * from tblintermediair", con)
   da.Fill(ds)

   ds.Tables(0).PrimaryKey = New DataColumn() {ds.Tables(0).Columns(0)}

   Dim rowcsv As DataRow
   Dim rowtabel As DataRow
   Dim intermediairnummer As Long
   For Each rowcsv In dtcsv.Rows
      intermediairnummer = rowcsv("intermediairnummer")
      rowtabel = ds.Tables(0).Rows.Find(intermediairnummer)
      If rowtabel Is Nothing Then
         'toevoegen
         ds.Tables(0).ImportRow(rowcsv)
      Else
         'updaten (dit moet ik nog doen)
         rowtabel("IntermediairNaam") = "test of dit werkt"
      End If
   Next
   If ds.HasChanges Then
      'hieronder een paar pogingen om de wijzigingen op te slaan maar dat werkt niet
      ds.Tables(0).AcceptChanges()
      ds.AcceptChanges()
      da.Update(ds)
      da.Update(ds.Tables(0))
   End If

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 13:07
Je DataAdapter heeft geen update / insertcommand?
Terzijde: je bent bekend met de DataTable.Merge methode?

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:08
Als je eens in de MSDN leest wat AcceptChanges doet, en hoe de Update method werkt van de DataAdapter, dan denk ik dat je er wel uit komt. ;)

Ik vraag me trouwens af waarom je AcceptChanges op je tabel aanroept en op je DataSet, en hetzelfde doet met de Update method ....

https://fgheysels.github.io/


  • masterpoi
  • Registratie: Oktober 2004
  • Laatst online: 18-11 13:41
Door acceptchanges aan te roepen voor de update denkt de adapter bij update dat er geen wijzigingen zijn om op te slaan (Unit Of Work pattern). Kortom, acceptchanges NIET aanroepen.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20-11 22:35

Creepy

Tactical Espionage Splatterer

Is dit een eenmalig iets of is dit iets wat regelmatig moet gaan gebeuren? Als het eenmalig is dan kan je ook eens kijken naar load data statement.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Zoufiax
  • Registratie: Augustus 2003
  • Laatst online: 29-03-2024
Ik ben afgestapt van het idee om het CSV-bestand in een datatable te laden en die op te slaan in een tabel. Ik voer nu een LOAD DATA query uit vanuit .NET en laat MySQL dus zelf het CSV-bestand importeren naar een importtabel. Als dat gedaan is voer ik update- en insertqueries uit om de geïmporteerde gegevens te "mergen" met de tabel waar de gegevens uiteindelijk in terecht moeten komen.
Pagina: 1