Trasferimento dati al database con binding

lunedì 10 giugno 2013 - 11.13
Tag Elenco Tags  VB.NET  |  Visual Studio 2010

MasterLed Profilo | Newbie

buongiorno, sono arenato su un problema di aggiornamento dati nel database.
la base dati è postgresql

la parte di prelievo dei dati funziona correttamente, ovvero tramite un dataset ed un binding su di una datagridview vedo tutti i dati del mio database utilizzando in apertura l'istruzione

Me.AnagdipTableAdapter.Fill(Me.AnagDip_DataSet.anagdip)




quando però modifico nella tabella dei dati e voglio andare ad aggiornare il database la procedura non mi segnala nessun errore, però nel database i dati non sono per nulla cambiati

Me.Validate()
Me.AnagdipBindingSource.EndEdit()
Me.AnagDip_DataSet.AcceptChanges()
Me.AnagdipTableAdapter.Update(Me.AnagDip_DataSet.anagdip)


sapete aiutarmi su dove sbaglio o cosa mi manca?


grazie

AntCiar Profilo | Expert

Ciao

L'errore sta qua: Me.AnagDip_DataSet.AcceptChanges()

In pratica non devi fare l'AcceptChanges() ma fare direttamente l'istruzione di Update che hai messo dopo.

Succede questo: quando tu fai delle modifiche dei dati contenuti nel dataset, ti vengono "marchiati" i record modificati a seconda delle modifiche che ci hai fatto sopra (RowState).
Quando richiami il medoto di Update il dataset valuta ogni singola riga e a seconda del RowState richiama l'istruzione adeguata (Insert, Update o Delete)

Quanto tu richiami il metodo AcceptChanges non fai altro che rimuovere tutti i RowState delle righe e quindi l'istruzione Update non esegue nessun comando sul DB.

PS. Update() al suo interno esegue già al termine un comando di AcceptChanges()
Cristian Barca

MasterLed Profilo | Newbie

ti ringrazio per la risposta, se tolgo però l'AcceptChang mi dà il seguente msg di errore e si inchioda sulla riga dell'Update

'Update richiede un UpdateCommand valido se la raccolta DataRow viene passato con righe modificate'

non riesco a venirne a capo di cosa mi manca per eseguire l'aggiornamento del database

AntCiar Profilo | Expert

questo è un altro problema.

Se lasci l'AcceptChange non ti va in errore perchè come detto non esegue nessun comando sul database.

ma il DataAdapter e il relativo Dataset lo hai creato con il wizard oppure lo hai fatto tu via codice?
Questo perchè l'errore che ti ha dato è relativo all'istruzione di Update nel DataAdapter che non è corretta oppure non è proprio valorizzata.

Per controllare puoi prima di fare l'UPDATE verificare l'oggetto XXXXX.UpdateCommand.CommandText (al posto di XXXX devi mettere il nome del tuo oggetto dataAdapter).
All'interno dell'UpdateCommand (come per l'InsertCommand e per il DeleteCommand) dovresti trovarci all'interno delle query parametriche del tipo:

UPDATE tab SET campo1= ?param1, campo2 = ?param2 WHERE chiave1 = ?chiave1 ....
Cristian Barca

MasterLed Profilo | Newbie

l'ho creato con il wizard... ed in effetti ora vedo che la proprietà 'UpdateCommand' e 'DeleteCommand' ha come valore (Nessuno)

ho riprovato creando un progetto da zero e tutto funziona... mi sa che ho mastruzzato troppo i dataset e si sono staccate tutte le connessioni e ha perso le proprietà, per questo non riusciva più a sincronizzarsi con il database
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5