Cancellare a blocchi di un dataset in binding a un dataset.

martedì 18 ottobre 2005 - 18.23

gilberto Profilo | Junior Member

Salve a tutti!

Ho un dataset in binding a un datagrid.
Mi piacerebbe sapere come eseguire una cancellazione a blocchi del dataset impostando un filtro.
Il collegamento è di tipo OleDb a un archivio Access.
Ho fatto un paio di tentativi, prima impostando un commanddelete che cancellasse un blocco di dati, poi usando un commandselect e scorrendo il dataset per le righe selezionate impostando dopo l'item(x) il metodo delete.
Updatando e riflillando non mi ha cancellato una cippa.

Qualcuno è in grado di spiegarmi come devo fare?

Ringrazio in anticipo chiunque riesca a mettermi sulla buona strada.

Brainkiller Profilo | Guru

>Qualcuno è in grado di spiegarmi come devo fare?

Ciao allora, abbiamo bisogna di una Connection di un DataAdapter di un DataSet e di un CommandBuilder.

Una volta che tu hai il tuo DataSet puoi bindarlo alla DataGrid. L'utente può fare tutte le operazioni che vuole, inserire, rimuovere ecc. una volta terminato tu devi rimandare le modifiche al database.

Devi usare il Command Builder per far sì che vengano creati i comandi di insert, update e delete. Come parametro ci metti il DataAdapter (da)

Dim olecb as OleDbCommandBuilder
olecb=new OleDbCommandBuilder(da)

Dopo le modifiche dell'utente puoi usare il metodo del DataSet AcceptChanges accetti quanto fatto dall'utente:
ds.AcceptChanges()

alla fine chiami l'Update del DataAdapter:
da.Update(ds)

e le modifiche saranno inviate al Database.
Ti consiglio quando crei il DataSet, quando lanci l'Update ecc. di sepcificare un nome tabella esempio
.Fill(ds,"Tabella")
.Update(ds,"Tabella")

Ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

gilberto Profilo | Junior Member

Grazie per l'aiuto ma, io intendevo una cosa diversa.
Il mio problema è cancellare interi blocchi di dati ( specificati da parametri tipo "ANNO=1999" ) all'interno della tabella ( una tabella non relazionata ad altre ) SENZA che sul datagrid bindato al dataset l'utente faccia alcunchè ( naturalmente facendo ciò si devono cancellare i dati anche alla fonte dati ).
E' questo che non capisco come fare.
Al limite sarebbe possibile usare direttamente una stored procedure con passaggio di parametri?

Ringrazio ulteriormente per il gentile aiuto, sempre se la comprensibilità della domanda sia completa!

Gilbert

gilberto Profilo | Junior Member

Ho trovato la soluzione!

Public Sub engage(ByVal miaquery As String, ByVal miaconnessione As String)

Dim connessione As New OleDbConnection(miaconnessione)
Dim almiocomando As New OleDbCommand(miaquery, connessione)

almiocomando.Connection.Open()
almiocomando.ExecuteNonQuery()
connessione.Close()

End Sub

Non riuscivo a risolvere grazie alla mia ignoranza sugli OleDbCommand e la ExecuteNonQuery.

Ti ringrazio moltissimo perchè mi hai permesso di cercare e trovare come si utilizzano gli OleDbCommand.

Gilbert

Brainkiller Profilo | Guru

Ok, ciao Gilberto,
a quanto pare il tuo problema era più facile del previsto.
Esattamente con la ExecuteNonQuery puoi eseguire un qualsiasi statement SQL, come DELETE, INSERT ecc.

Naturalmente è sempre consigliato in presenza di un SQL Server, l'utilizzo di Stored Procedure.

ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5