Avatar billede sandrasmurf Nybegynder
26. juni 2009 - 13:38 Der er 2 kommentarer og
1 løsning

DataAdapter - update på joined tabel

Hej Eksperter

Jeg mangler assistance til at update ændringer foretaget i et datagridview tilbage til en Access DB. Jeg benytter nedenstående procedure for at databinde en tabel til et grid.

OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, _connString);
DataTable dbTable = new DataTable();
dAdapter.Fill(dbTable);
bindingSource.DataSource = dbTable.DefaultView;
dataGridView1.DataSource = bindingSource;

Hvis query i første linie er på formen "Select * from TableName", så kan jeg bare kalde

dAdapter.Update(dbTable);

for at gemme ændringer, da datadapteren selv kan udlede update-querien.

Nu har jeg desværre fået brug for at kunne gemme joinede visninger og det kan jeg ikke få til at virke. Her er DataAdapteren ikke længere så medgørlig.

Jeg har forsøgt selv at sætte dAdapter.UpdateCommand, men den fejler konstant.

Er der nogen der ved hvordan man skal udforme sin OleDbCommand, så den kan bruges af db adapteren.

Jeg klipper mine queries og forsøg ind i næste indlæg
Avatar billede sandrasmurf Nybegynder
26. juni 2009 - 13:38 #1
Select Query, der bruges til Fill:

SELECT EDIP_Daly_Factors.ID,
EDIP_Daly_Zones.Description,
EDIP_Emission_Type.Description,
EDIP_Daly_Factors.Amount
FROM EDIP_Daly_Zones
INNER JOIN (EDIP_Emission_Type
INNER JOIN EDIP_Daly_Factors
ON EDIP_Emission_Type.ID = EDIP_Daly_Factors.EmissionType_FK)
ON EDIP_Daly_Zones.ID = EDIP_Daly_Factors.DalyZone_FK;
Avatar billede sandrasmurf Nybegynder
26. juni 2009 - 13:41 #2
string cmd =
"UPDATE EDIP_Emission_Type INNER JOIN (EDIP_Daly_Factors INNER JOIN EDIP_Daly_Zones ON EDIP_Daly_Factors.DalyZone_FK = EDIP_Daly_Zones.ID) ON EDIP_Emission_Type.ID = EDIP_Daly_Factors.EmissionType_FK SET EDIP_Daly_Factors.ID = [?], EDIP_Daly_Zones.Description = [?], EDIP_Emission_Type.Description = [?], EDIP_Daly_Factors.Amount = [?];";

updateCommand = new OleDbCommand(cmd);
updateCommand.Parameters.Add("@i", OleDbType.Integer);
updateCommand.Parameters.Add("@d", OleDbType.VarChar);
updateCommand.Parameters.Add("@e", OleDbType.VarChar);
updateCommand.Parameters.Add("@f", OleDbType.Double);
Avatar billede sandrasmurf Nybegynder
26. juni 2009 - 16:22 #3
Jeg slap afsted med følgende efter at have prøvet mange ting af hele eftermiddagen.

Man kan klare sig igennem ved at holde fingrene fra de joinede kolonner og kun definere update for de kolonner, der tilhører basis tabellen.

updateCommand = new OleDbCommand("UPDATE EDIP_Daly_Factors Set Amount = ? Where ID = ?");
updateCommand.Parameters.Add("@f", OleDbType.Double, 32, "Amount");
updateCommand.Parameters.Add("@i", OleDbType.Integer, 10, "ID");

dAdapter.UpdateCommand = updateCommand ;
dAdapter.Update(_dbTable);

Jeg lukker spørgsmålet og finder en plads i solen med en kold øl.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester