[.NET] Toevoegen inhoud dataset aan access tabel

Pagina: 1
Acties:

  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
Ik ben bezig met een progje wat een dataset vult vanuit een webservice.
Deze data moet geinsert worden in een (lokale) access DB.
Zoeken via google geeft me veel antwoorden hoe ik dit moet doen in een MS SQL DB via stored procdures, maar die heeft access niet.

Ik doe nu dit, maar dat werkt niet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Public Sub StoreData(ByVal AanAf)
        Dim conClsf As OleDbConnection
        Dim cmdMbrs As OleDbCommand
        Dim rdrMbrs As OleDbDataReader
        Dim dapMbrs As OleDbDataAdapter

        Dim BulkImport As BulkImport.Service1 = New BulkImport.Service1
        Dim BulkMailDataSet As DataSet
        BulkMailDataSet = BulkImport.GetRecords("aanmeldingen")

        conClsf = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DB & ";")
        conClsf.Open()

        dapMbrs = New OleDbDataAdapter( _
           "SELECT * FROM " & AanAf & " ;", _
           conClsf)

        dapMbrs.Update(BulkMailDataSet, "mailinglist-data")
    End Sub


Wie helpt mij verder?

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21-05 16:50

gorgi_19

Kruimeltjes zijn weer op :9

Geef in ieder geval aan wat de foutmeldingen zijn. Daarnaast zie ik geen enkel Insert statement in je code, dus deze mis je sowieso ook.

Waarom specificeer je geen type bij AanAf?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
Ik krijg geen foutmelding, er wordt gewoon niets geinsert.

Ik heb geen insert commando gebakken omdat ik de indruk kreeg (oa door dit topic [rml][ SQL/MS Access] Meerdere records in 1 query *[/rml]) dat dit commando
code:
1
dapMbrs.Update(BulkMailDataSet, "mailinglist-data")
dat opving.

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Je data-adapter heeft geen command gespecifieerd voor het Insert command.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Ding schreef op 04 oktober 2004 @ 16:52:
Ik krijg geen foutmelding, er wordt gewoon niets geinsert.

Ik heb geen insert commando gebakken omdat ik de indruk kreeg (oa door dit topic [rml][ SQL/MS Access] Meerdere records in 1 query *[/rml]) dat dit commando
code:
1
dapMbrs.Update(BulkMailDataSet, "mailinglist-data")
dat opving.
Nee, je moet het InsertCommand dus zelf maken, tenzij je met de command-builder aan de slag gaat.

https://fgheysels.github.io/


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
whoami schreef op 04 oktober 2004 @ 16:53:
[...]


Nee, je moet het InsertCommand dus zelf maken, tenzij je met de command-builder aan de slag gaat.
Wat adviseer jij me, zelf bakken of command builder gebruiken?

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
InsertCommand ingebakken, maar ik denk dat ik iets niet goed begrijp....
Er word nog steeds niets geinsert.
Het goede nieuws is dat er geen foutmelding is....

code:
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
31
32
33
34
    Public Sub StoreData(ByVal AanAf)
        Dim conClsf As OleDbConnection
        Dim cmdMbrs As OleDbCommand
        Dim rdrMbrs As OleDbDataReader
        Dim dapMbrs As OleDbDataAdapter
        Dim cmd As OleDbCommand

        Dim BulkImport As BulkImport.Service1 = New BulkImport.Service1
        Dim BulkMailDataSet As DataSet
        BulkMailDataSet = BulkImport.GetRecords("aanmeldingen")

        conClsf = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DB & ";")
        conClsf.Open()

        dapMbrs = New OleDbDataAdapter( _
           "SELECT * FROM " & AanAf & " ;", _
           conClsf)
        ' Create the InsertCommand.

        cmd = New OleDbCommand("INSERT INTO web_aanmeldingen (bm_id, bm_voornaam, bm_tussenvoegsel, bm_achternaam, bm_email, bm_bronkode, bm_context) " & _
                             "VALUES (@bm_id, @bm_voornaam, @bm_tussenvoegsel, @bm_achternaam, @bm_email, @bm_bronkode, @bm_context)", conClsf)

        cmd.Parameters.Add("@bm_id", OleDbType.Double, 5, "bm_id")
        cmd.Parameters.Add("@bm_voornaam", OleDbType.VarChar, 40, "bm_voornaam")
        cmd.Parameters.Add("@bm_tussenvoegsel", OleDbType.VarChar, 40, "bm_tussenvoegsel")
        cmd.Parameters.Add("@bm_achternaam", OleDbType.VarChar, 40, "bm_achternaam")
        cmd.Parameters.Add("@bm_email", OleDbType.VarChar, 40, "bm_email")
        cmd.Parameters.Add("@bm_bronkode", OleDbType.VarChar, 10, "bm_bronkode")
        cmd.Parameters.Add("@bm_context", OleDbType.VarChar, 40, "bm_context")

        dapMbrs.InsertCommand = cmd

        dapMbrs.Update(BulkMailDataSet, "mailinglist-data")
    End Sub


Ben ik zo wel op de goede weg?

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 21-05 08:21
gaat het uberhaupt wel met een update methode ?
Je moet toch rijen inserten ?

Als het een eenmalig eigen gebruik tooltje is, kan je gewoon toch je dataset doorlopen en steeds na elke rij een insert doen ?
Misschien niet zo netjes, maar wel makkelijker.

The best thing about UDP jokes is that I don't care if you get them or not.


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

Een dataadapter is, zoals het zegt, een adapter.
Je kan er 4 verschillende typen commando's aanhangen (Select, Insert, Update, Delete).

Door DataAdapter.Fill wordt met behulp van Select een tabel gevuld.
M.b.v. DataAdapter.Update worden alle veranderde rijen in de tabel (toegevoegde rijen tellen mee) doorgevoerd.

Het makkelijkst is door een dataadapter in een form te slepen; command-builder en dan een Fill en Update functie.

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Remc0 schreef op 04 oktober 2004 @ 17:57:
gaat het uberhaupt wel met een update methode ?
Je moet toch rijen inserten ?

Als het een eenmalig eigen gebruik tooltje is, kan je gewoon toch je dataset doorlopen en steeds na elke rij een insert doen ?
Misschien niet zo netjes, maar wel makkelijker.
Er zal iets niet helemaal in orde zijn met je parameter bindings.
In plaats van SELECT * kan je eens alle velden afzonderlijk 'opnoemen'.

https://fgheysels.github.io/


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
Chief.NET schreef op 04 oktober 2004 @ 19:22:
Een dataadapter is, zoals het zegt, een adapter.
Je kan er 4 verschillende typen commando's aanhangen (Select, Insert, Update, Delete).

Door DataAdapter.Fill wordt met behulp van Select een tabel gevuld.
M.b.v. DataAdapter.Update worden alle veranderde rijen in de tabel (toegevoegde rijen tellen mee) doorgevoerd.

Het makkelijkst is door een dataadapter in een form te slepen; command-builder en dan een Fill en Update functie.
Ik denk dat hier de kern van mijn probleem ligt.
Mijn dataset wordt gevuld door een webservice, en niet door een data adapter.

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Ding schreef op 05 oktober 2004 @ 09:56:
[...]

Ik denk dat hier de kern van mijn probleem ligt.
Mijn dataset wordt gevuld door een webservice, en niet door een data adapter.
Dat maakt niet uit, die webservice zal wel op eeoa manier je dataset gaan vullen.
Zorg er wel voor dat je parameters van je INSERT command gebonden zijn aan de juiste datacolumns van de juiste tabel in de dataset.

https://fgheysels.github.io/


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
whoami schreef op 04 oktober 2004 @ 19:56:
[...]


Er zal iets niet helemaal in orde zijn met je parameter bindings.
In plaats van SELECT * kan je eens alle velden afzonderlijk 'opnoemen'.
Dat heb ik nu ook gedaan, en het werkt nog steeds niet.

code:
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
31
32
33
    Public Sub StoreData(ByVal AanAf)
        Dim conClsf As OleDbConnection
        Dim dapMbrs As OleDbDataAdapter
        Dim cmd As OleDbCommand

        Dim BulkImport As BulkImport.Service1 = New BulkImport.Service1
        Dim BulkMailDataSet As DataSet
        BulkMailDataSet = BulkImport.GetRecords("aanmeldingen")

        conClsf = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DB & ";")
        conClsf.Open()

        dapMbrs = New OleDbDataAdapter( _
           "SELECT bm_id, bm_voornaam, bm_tussenvoegsel, bm_achternaam, bm_email, bm_bronkode, bm_context FROM web_aanmeldingen;", _
           conClsf)

        Dim DataRowsCommandBuilder As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(dapMbrs)

        cmd = New OleDbCommand("INSERT INTO web_aanmeldingen (bm_id, bm_voornaam, bm_tussenvoegsel, bm_achternaam, bm_email, bm_bronkode, bm_context) " & _
                             "VALUES (@bm_id, @bm_voornaam, @bm_tussenvoegsel, @bm_achternaam, @bm_email, @bm_bronkode, @bm_context)", conClsf)

        cmd.Parameters.Add("@bm_id", OleDbType.Double, 5, "bm_id")
        cmd.Parameters.Add("@bm_voornaam", OleDbType.VarChar, 40, "bm_voornaam")
        cmd.Parameters.Add("@bm_tussenvoegsel", OleDbType.VarChar, 40, "bm_tussenvoegsel")
        cmd.Parameters.Add("@bm_achternaam", OleDbType.VarChar, 40, "bm_achternaam")
        cmd.Parameters.Add("@bm_email", OleDbType.VarChar, 40, "bm_email")
        cmd.Parameters.Add("@bm_bronkode", OleDbType.VarChar, 10, "bm_bronkode")
        cmd.Parameters.Add("@bm_context", OleDbType.VarChar, 40, "bm_context")

        dapMbrs.InsertCommand = cmd

        dapMbrs.Update(BulkMailDataSet, "mailinglist-data")
    End Sub


Ik hoop dat iemand me alsnog op weg kan helpen, ik moet vandaag toch wel zo ver komen dat die data de DB in gaat, anders moet ik een andere oplossing gaan verzinnen.

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
whoami schreef op 05 oktober 2004 @ 09:57:
[...]


[knip]
Zorg er wel voor dat je parameters van je INSERT command gebonden zijn aan de juiste datacolumns van de juiste tabel in de dataset.[/knip]
Wat bedoel je hier precies mee WHOAMI?

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

Ding schreef op 05 oktober 2004 @ 09:57:
[...]


Dat heb ik nu ook gedaan, en het werkt nog steeds niet.

[...]

Ik hoop dat iemand me alsnog op weg kan helpen, ik moet vandaag toch wel zo ver komen dat die data de DB in gaat, anders moet ik een andere oplossing gaan verzinnen.
Maak in de webservice even een Form aan en sleep er een DataAdapter op. Configureer de DataAdapter zoals je 'm wilt hebben en kijk dan wat voor code er gegenereerd wordt, en kopieer dat.

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
Chief.NET schreef op 05 oktober 2004 @ 10:02:
[...]


Maak in de webservice even een Form aan en sleep er een DataAdapter op. Configureer de DataAdapter zoals je 'm wilt hebben en kijk dan wat voor code er gegenereerd wordt, en kopieer dat.
Ik mag met drag and drop alleen een data adapter naar een SQL server verbinen, of een ODBC bron. Hier heb ik niets aan vrees ik.

Ik denk dat ik het maar op de klassieke manier met een loop met inserts ga op lossen.
Sterker, dat had waarschijnlijk al gewerkt als ik daar gisteren gelijk mee begonnen was.

Het leek gewoon makkelijk EN mogelijk om een dataset in zijn geheel terug te mikken in de database, maar dit kost me idioot veel tijd voor een routine van niets.
Ben ik nou zo ouderwets dat ik moeite heb met die click-and-go programmeer omgevingen? Mijn roots liggen inderdaad in de mainframe wereld, al is dat al wel weer een hele tijd terug.

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Ding schreef op 05 oktober 2004 @ 09:59:
[...]


Wat bedoel je hier precies mee WHOAMI?
Dat de waarde van source-column die je meegeeft aan die parameter, dezelfde naam zal moeten hebben als de data-column in je dataset.

code:
1
cmd.Parameters.Add ("@param_name, .... , "bm_naam");

Die 'bm_naam' moet dus overeenstemmen met een naam van een datacolumn in je dataset.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Ding schreef op 05 oktober 2004 @ 10:16:
[...]

Ben ik nou zo ouderwets dat ik moeite heb met die click-and-go programmeer omgevingen? Mijn roots liggen inderdaad in de mainframe wereld, al is dat al wel weer een hele tijd terug.
.NET is geen 'click en go' omgeving hoor. Sterker zelfs, ik werk dagelijks in .NET maar ik gebruik nooit de 'sleur en pleur' manier om een dataadapter te maken etc...

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21-05 16:50

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 05 oktober 2004 @ 10:18:
[...]


.NET is geen 'click en go' omgeving hoor. Sterker zelfs, ik werk dagelijks in .NET maar ik gebruik nooit de 'sleur en pleur' manier om een dataadapter te maken etc...
* gorgi_19 heeft sowieso al een hekel aan die dataadapters / datasets . Enige voordeel is dat het een Unit Of Work is, maar voor de rest krijg ik liever een gevulde arraylist (met classes) terug

[ Voor 9% gewijzigd door gorgi_19 op 05-10-2004 10:21 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
whoami schreef op 05 oktober 2004 @ 10:17:
[...]


Dat de waarde van source-column die je meegeeft aan die parameter, dezelfde naam zal moeten hebben als de data-column in je dataset.

code:
1
cmd.Parameters.Add ("@param_name, .... , "bm_naam");

Die 'bm_naam' moet dus overeenstemmen met een naam van een datacolumn in je dataset.
Die bm_ namen komen exact overeen met mijn database, dus dat zou het probleem niet moeten zijn....

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21-05 16:50

gorgi_19

Kruimeltjes zijn weer op :9

[gokmodus]
Trouwens, dat Unit Of Work zou best wel eens de oorzaak kunnen zijn van het probleem, aangezien het alleen nieuwe records in de dataset gaat toevoegen. Best kans dat hij de records niet ziet als nieuwe records, en dan ook niet gaat toevoegen.
[/gokmodus]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
whoami schreef op 05 oktober 2004 @ 10:18:
[...]


.NET is geen 'click en go' omgeving hoor. Sterker zelfs, ik werk dagelijks in .NET maar ik gebruik nooit de 'sleur en pleur' manier om een dataadapter te maken etc...
Sorry, da's mijn frustratie.......
Ik ben nu al twee dagen bezig om een paar duizend records bij een lokale database naar binnen te fietsen, in mijn opinie een 10-minuten klusje.
Mijn baas staat inmiddels ook wat in mijn nek te hijgen, vandaar mijn ongeduld denk ik.

Mijn ideeen rond deze aanpak zijn op, ik kan niet langer wachten en moet vandaag die records over kunnen fietsen, ik ga het maar over een hele andere boeg gooien.
Ik denk dat ik iets ga schrijven met een FTP client, gewoon in VB6, en dan alsnog die records over hevel van de ene DB in de andere.
Naar mijn idee geen mooie oplossing, maar ik MOET vandaag iets werkend krijgen.

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
gorgi_19 schreef op 05 oktober 2004 @ 10:24:
[gokmodus]
Trouwens, dat Unit Of Work zou best wel eens de oorzaak kunnen zijn van het probleem, aangezien het alleen nieuwe records in de dataset gaat toevoegen. Best kans dat hij de records niet ziet als nieuwe records, en dan ook niet gaat toevoegen.
[/gokmodus]
Oeioeioei, nou geef je me weer een beetje hoop dat dit nog wel eens zou kunnen werken bedoel je?

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
Ding schreef op 05 oktober 2004 @ 10:22:
[...]


Die bm_ namen komen exact overeen met mijn database, dus dat zou het probleem niet moeten zijn....
Niet je database, je dataset

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21-05 16:50

gorgi_19

Kruimeltjes zijn weer op :9

Ding schreef op 05 oktober 2004 @ 10:26:
[...]


Sorry, da's mijn frustratie.......
Ik ben nu al twee dagen bezig om een paar duizend records bij een lokale database naar binnen te fietsen, in mijn opinie een 10-minuten klusje.
Mijn baas staat inmiddels ook wat in mijn nek te hijgen, vandaar mijn ongeduld denk ik.

Mijn ideeen rond deze aanpak zijn op, ik kan niet langer wachten en moet vandaag die records over kunnen fietsen, ik ga het maar over een hele andere boeg gooien.
Ik denk dat ik iets ga schrijven met een FTP client, gewoon in VB6, en dan alsnog die records over hevel van de ene DB in de andere.
Naar mijn idee geen mooie oplossing, maar ik MOET vandaag iets werkend krijgen.
Snelle oplossing; gewoon door de dataset.tables(0).Rows heenlopen met een loopje en dan per stuk toevoegen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
gorgi_19 schreef op 05 oktober 2004 @ 10:24:
[gokmodus]
Trouwens, dat Unit Of Work zou best wel eens de oorzaak kunnen zijn van het probleem, aangezien het alleen nieuwe records in de dataset gaat toevoegen. Best kans dat hij de records niet ziet als nieuwe records, en dan ook niet gaat toevoegen.
[/gokmodus]
Dat zou kunnen, maar dan zou de AcceptChanges() al moeten aangeroepen zijn aan die dataset.
Ding: misschien kan je eens kijken of de DataSet wel rijen bevat die moeten gewijzigd worden:
code:
1
myDataSet.GetChanges().Tables[0].Rows.Count;

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:34
gorgi_19 schreef op 05 oktober 2004 @ 10:27:
[...]

Snelle oplossing; gewoon door de dataset.tables(0).Rows heenlopen met een loopje en dan per stuk toevoegen.
Dat is hetgeen wat de DataAdapter intern ook doet geloof ik...

https://fgheysels.github.io/


  • MrSleeves
  • Registratie: Februari 2004
  • Laatst online: 10-04 19:23

MrSleeves

You'll thank me later.

whoami schreef op 05 oktober 2004 @ 10:30:
[...]


Dat is hetgeen wat de DataAdapter intern ook doet geloof ik...
Klopt en daarbij kijkt ie naar de status van de Row om te bepalen of er een Update, Insert of Delete gebruikt moet worden.

30Drie Web Design & IT Consultancy | Raven Consultancy Services


  • Ding
  • Registratie: Juni 2002
  • Laatst online: 12-04 18:50
Chief.NET en Whoami, allebei bedankt voor je geduld met een chagrijnige, ongeduldige en bovendien eigenwijze dwarspisser als ik.
Jullie lijken me heel behoorlijk thuis in deze materie waar ik duidelijk nog een stuk meer ervaring in moet opdoen.
Ik vrees dat ik eerst nog veel meer moet spelen met .NET voor dat ik daadwerkelijk dingen op mijn werk doe met .NET, want tijdgebrek is denk ik de grootste bron van frustratie voor mij.

Ik ga het nu proberen op te lossen met een loopje, wat volgens mij geen schokkende gevolgen heeft voor de performance, maar (voor mij) wel lekker makkelijk en begrijpelijk is.

Mocht ik jullie nog eens kunnen helpen met "oude troep" zal ik daar zeker tijd in steken!

Alles is bespreekbaar. Dat betekent NIET dat je alles mag zeggen!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 21-05 16:50

gorgi_19

Kruimeltjes zijn weer op :9

Ik ga het nu proberen op te lossen met een loopje, wat volgens mij geen schokkende gevolgen heeft voor de performance, maar (voor mij) wel lekker makkelijk en begrijpelijk is.
Aangezien je toch alles moet toevoegen, zal dat idd weinig gevolgen hebben voor je performance in vergelijking met een dataset :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1