Dataset e primi passi.....

mercoledì 19 gennaio 2005 - 12.35

d@dora Profilo | Senior Member

ciao a tutti, sto muovendo i primi passi con i dataset (prima utilizzavo accessi diretti), ma mi ritrovo con un errore che non capisco :Error: Eccezione lanciata da un componente esterno.

il codice e' :
Dim a As OleDbDataAdapter = New OleDbDataAdapter(sSql, strASConn)
Dim s As DataSet = New DataSet

a.Fill(s, "Ancox")

Dim t As DataTable = s.Tables("Ancox")
Dim NewRec As DataRow
NewRec = t.NewRow

NewRec(campi1) = rs.Item(campi1)
.......

t.Rows.Add(NewRec)

a.Update(s, "Ancox")

istruzione che da l'errore !
NN capisco dove sbaglio .

Ciao e grazie

micto27 Profilo | Senior Member

Una cosa da sistemare che noto nel codice è la seguente:
dopo l'istruzione
a.Fill(s, "Ancox")
credo che dovresti eseguire l'istruzione
s.AcceptChanges()
in questo modo si dice al DataAdapter di considerare le modifiche sul dataset solo da qui in avanti (viene resettato il RowState di ogni DataRow caricato nel Dataset); diversamente quando invochi il metodo Update il dataadapter considererà come modifiche da applicare anche le righe lette con il metodo Fill e quindi, genererà degli statement INSERT anche per le righe già presenti nel database.

Se non sono stato sufficentemente chiaro chiedi ancora.
Ciao, Michele.

Cteniza Profilo | Guru

Sicuramente inserire AcceptChanges non sortisce nessun effetto.
Il dataadapter in caso di update che va a buon fine genera automaticamente il comando AcceptChanges.
Secondo me potrebbe funzionare dare EndCurrentEdit prima dell'update del dataadapter oppure ricercare in qualche oggetto collegato la causa dell'errore

micto27 Profilo | Senior Member

Sono d'accordo sul fatto che se Update va a buon fine viene eseguito AcceptChanges; il problema che evidenziavo io è a monte. Dopo la chiamata al metodo Fill tutte le righe caricate nel Dataset hanno RowState = Added e quindi senza AcceptChanges dipo il Fill il Dataadapter proverebbe a reinserirle nuovamente nel database.

Certo non è detto che sia questa la causa dell'eccezzione segnalata comunque mi sembrava il caso di segnalarla.

Ciao, Michele.

Cteniza Profilo | Guru

Quello che dici (dopo Fill le righe hanno lo stato inserted) non corrisponde al vero.
Fill, al pari di Update fa automaticamente l'acceptchanges lo stato dopo il fill o l'update è unchanged.
Se vuoi fare una prova popola un dataset e subito dopo prova a fare il test
if myDataset.HasChanges then MessageBox.Show("modifiche")
vedrai che in nessun caso dopo fill o update che sia andato a buon fine il messaggio comparirà

micto27 Profilo | Senior Member

hai ragione (ero sicuro che fosse come avevo scritto per un problema che avevo avuto tempo fa) facendo ora delle prove confermo invece la tua versione. Devo essermi confuso e quindi mi scuso.

Michele.
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