Toon posts:

[C# + OleDb] Fout bij Insert met DataAdapter.Update

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit met het volgende:

Ik gebruik een Access Database met de volgende Tabellen: DebCred en DebCredImport.
DebCred = gegevens van debiteuren en crediteuren
DebCredImport = kolomgegevens van te importeren CSV sheet.

DebCred en DebCredImport zijn gekoppeld omdat je kolomgegevens bijhoud van de CSV sheet die bij dat bedrijf hoort. (Hoef je het niet elke keer op te geven).

Tabelstructuur:

DebCred
------------------------------------------
Id - Autonummering
Bedrijfsnaam - Varchar
------------------------------------------

(En meer bedrijfsgegevens die n.v.t. zijn) DebCred tabel insert enz gaat ook goed

DebCredImport
------------------------------------------
Id - Autonummering
LeveranciersId - Integer
ArtikelColumn - Varchar
NaamColumn - Varchar
BeschrijvingColumn - Varchar
InkExclColumn - Varchar
InkInclColumn - Varchar

De DataRelation is tussen DebCred.Id en DebCredImport.LeveranciersId

Hierbij heb ik de volgende code (Hier heb ik wel stukken weggeknipt die n.v.t. zijn (Andere tabellen enz)):

InternalDB - Static class die alles van de Database op 1 centrale plek houd.
C#:
1
<snip lap code weg>

[ Voor 91% gewijzigd door een moderator op 08-04-2009 12:20 . Reden: Even een overdaad aan code verwijderd ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
fieldsettingsform - Gebruikt om kolommen te koppelen aan de CSV file.
C#:
1
<snip lap code weg>


Ik krijg de volgende Exception bij de uitvoer waarvan ik geen idee heb hoe hij erbij komt.
Exception Message : De instructie INSERT INTO bevat de volgende onbekende veldnaam: ArtikelColumn. Zorg ervoor dat u de naam correct hebt getypt en probeer het nogmaals.

Stacktrace :
bij System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
bij System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
bij System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
bij System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows)
bij GAP.InternalDB.updateData(Int32 adaptertype, DataTable changes) in C:\Documents and Settings\gebruiker\Mijn documenten\Visual Studio 2005\Projects\GAP\InternalDB.cs:regel 320

Als ik de ItemArray van de Row bekijkt die geupdate wordt, staat alles erin
De kolomnamen in de Tabel binnen de DataSet kloppen ook.
Als ik de Parametervalues controleer. zijn die ook allemaal gevuld zoals ze moeten zijn.
Ik vraag me dus af. wat gaat er precies fout want de kolom ArtikelColumn bestaat wel degelijk in de database. Staat ook in de InserCommand en staat in de Tabel binnen de dataset.
Als er meer info nodig is hoor ik het graag dan zal ik die z.s.m. geven

Mmm misschien wel hele lange post met de code maarja :?

[ Voor 52% gewijzigd door een moderator op 08-04-2009 12:20 . Reden: Even een overdaad aan code verwijderd ]


Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Tjeemig wat een lange lap code. Mijn tip is: kopieer je insert statement naar een query window van Access, voer wat dummy data in en kijk of ie het dan wel doet.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 08 april 2009 @ 11:14:
Mmm misschien wel hele lange post met de code maarja :?
Het is dan ook fijn als je enkel relevante(!!!) code post en even een ("uitgeklede") test-case opzet om je probleem te demonstreren. 6 pagina's code debuggen voor je gaan we hier dus niet doen ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik weet het is een lange lap . had het denk ik ook wel in kunnen korten.

Als ik de query gewoon in Access doe gaat goed.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok. Hier dan de regels waar ik denk dat de meeste relevantie zit voor het probleem.

DataRelation en Insertcommand
C#:
1
2
3
completeDB.Relations.Add(new DataRelation("LeverancierBijImport", completeDB.Tables["DebCred"].Columns["Id"], completeDB.Tables["DebCredImport"].Columns["LeveranciersId"]));

debcredimportAdapter.InsertCommand = new OleDbCommand("INSERT INTO DebCredImport (LeveranciersId,ArtikelColumn,NaamColumn,BeschrijvingColumn,InkExclColumn,InkInclColumn) VALUES (?,?,?,?,?,?)", connection);


Initializatie van de BindingSource , Maken van een nieuwe row en de BindingSource koppelen aan controls
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
BindingSource importvelden = new BindingSource(InternalDB.CompleteDataSet, "DebCredImport");

//id = Id van Leverancier en is gevuld
importvelden.AddNew();
importvelden.MoveLast();
((DataRowView)importvelden.Current)["LeveranciersId"] = id;
importvelden.EndEdit();

//Databindings die gebruikt worden om de rij te vullen
cmbNummer.DataBindings.Add("Text", importvelden, "ArtikelColumn");
cmbNaam.DataBindings.Add("Text", importvelden, "NaamColumn");
cmbOmschrijving.DataBindings.Add("Text", importvelden, "BeschrijvingColumn");
cmbInkoopExBTW.DataBindings.Add("Text", importvelden, "InkExclColumn");
cmbInkoopInclBTW.DataBindings.Add("Text", importvelden, "InkInclColumn");


Het opslaan in de DB
C#:
1
2
3
4
5
6
importvelden.EndEdit();

//changes = tabel DebCredImport in de Dataset
debcredimportAdapter.Update(changes.Select(null, null, DataViewRowState.Deleted));
debcredimportAdapter.Update(changes.Select(null, null, DataViewRowState.ModifiedCurrent));
debcredimportAdapter.Update(changes.Select(null, null, DataViewRowState.Added));


Hoop dat het goed genoeg is .

[ Voor 3% gewijzigd door Verwijderd op 08-04-2009 12:54 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het probleem lag niet helemaal waar ik dacht dat het lag.

Als ik vanuit mijn MDI Parent de Fieldsetter (form) open en dan toevoeg gaat het goed.
Als ik vanuit mijn MDI Parent de CSVImporter open en van daaruit de Fieldsetter open en dan toevoeg gaat het fout.

Dus er zit ergens iets in de CSVImporterter lijkt mij die de hele boel verknoeit. Weet alleen nog niet waar,
Maar dat zal ik uitzoeken
Pagina: 1