XmlDataDocument e memorizzazione dati in db

giovedì 03 agosto 2006 - 14.53

stena Profilo | Junior Member

Sto iniziando a utilizzare il componente XmlDataDocument.

Nell'help trovo scritto:
<<...Qualsiasi modifica apportata alla classe XmlDataDocument viene applicata anche al DataSet e viceversa.>>

Se inserisco i dati di una tabella nell'XmlDataDocument e in seguito modifico l'oggetto xml, a questo punto come faccio a dire al dataset di rimemorizzare i dati nel database, visto che se uso il metodo Update mi da errore ?

Spero di essere stato chiaro, grazie.

freeteo Profilo | Guru

ciao,
Hai verficato con qualche breakpoint, se appena prima del metodo, il dataset in memoria è stato cambiato?
ma che errore ti da? perche sembrerebbe che tu non abbia impostato l'updateCommand del dataset, quindi quando richiami il metodo, lui non sa che "query" eseguire...


ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

stena Profilo | Junior Member

Dopo aver modificato l'oggetto xml, il dataset in memoria è cambiato e lo vedo sia da debug che tramite il metodo HasChanges().

A questo punto creo un nuovo dataset:
nuovoDs = oldDs.GetChanges() ottendo il record modificato;

eseguo l'update tramite da.Update(dds, "Users") dove Users è la tabella modificata.
Solo che mi da questo messaggio di errore:
"Update richiede un UpdateCommand valido se l'insieme DataRow viene passato con righe modificate."
Se invece eseguo da.Update(dds) ottengo il seguente messaggio di errore:
"Update non è in grado di trovare TableMapping['Table'] o DataTable 'Table'."

P.S.:
Ho scelto di utilizzare il componente XmlDataDocument per non creare oggetti DataTable e DataRow.

freeteo Profilo | Guru

ciao,
ti ho gia risposto prima, ti manca di settare l' "UpdateCommand" di quel dataset, ovvero la query da eseguire quando richiami il metodo update.
In .net a differenza di adodb di com (vb6 per intenderci), i dati sono disconnessi, non ti basta fare update, devi dirgli anche che query fare...

Prova a guardare qui:
http://msdn.microsoft.com/library/ita/default.asp?url=/library/ITA/cpref/html/frlrfsystemdataoledboledbdataadapterclassupdatecommandtopic.asp
parla di oledb ma per sql è lo stesso, cambia solo il tipo, il concetto è uguale.

Pio se vuoi puoi fartelo creare da lui, senza farlo tu, basta che usi la classe creata proprio per questo ovvero "CommandBuilder":
http://msdn.microsoft.com/library/ita/default.asp?url=/library/ITA/cpguide/html/cpconautomaticallygeneratedcommands.asp


ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

stena Profilo | Junior Member

Finora la query per l'"UpdateCommand" la scrivevo direttamente da codice oppure la routine che mi richiamava "UpdateCommand" mi dava anche i campi chiave dei record ad modificare; solo che ora la devo creare dinamicamente poichè non so a priori quali saranno i record che dovrò modificare.

Da quello che ho letto sembra che devo utilizzare "CommandBuilder", solo che per il suo utilizzo devo dichiarare una query nella "SelectCommand" e qui sbaglio:
Nelle prove effettuate mi da questo errore:
"Generazione SQL dinamica per UpdateCommand non supportata per un SelectCommand che non restituisce informazioni di colonne chiave."

Ciao e grazie per l'aiuto.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5