Ricerca 
it-ITen-US
Registrazione
Accedi
In-Vesti Dotnetwork
IN-VESTI DNW!!!
Sono finalmente arrivate le nuovissime T-Shirt di DotNetWork!!! Con soli 15,00 € ci sosterrai nelle spese di gestione della Community e ti invieremo a casa una splendida maglietta.
Se vuoi contribuire al mantenimento di DotNetWork.it Vai sulla pagina Iscrizioni
Effettua il pagamento usando IWBank
Click per andare alla pagina di Iscrizione
Oppure un Bonifico bancario (le coordinate sono sulla pagina Iscrizioni), inviaci una mail a support@dotnetwork.it indicandoci la tua taglia e l'indirizzo di spedizione.  Non appena verificata la ricezione del pagamento provvederemo a spedirti la tua T-Shirt.  Le magliette sono disponibili nelle taglie S-M-L-XL-XXL (in caso di esaurimento di una delle taglie, indica quella di "Backup"). Grazie per IN-VESTIRTI con NOI!!!
.:DotNetWork Founders:.
    Stampa     


DotNetWork Forums
[vb2008] Salvataggio dati tramite dataadapter
Ultimo Post 28 lug 2010 08.16 by Hidden. 3 Risposte.
Stampa immediata
Ordina:
PrevPrev ProssimoProssimo
Non sei autorizzato ad inviare una risposta.
Autore Messaggi Non risolto

Posts:663

--
27 lug 2010 09.06  
Salve a tutti volevo chiedere come mai il codice che riporto di seguito non funzioni correttamente. In realtà non mi da nesun errore semplicemente non salva i dati all'interno del database e non riesco a capire il perchè. Sto dimenticando qualcosa? Sicuramente

Dim D As New DataTable("TEMP")
Using connection As New Odbc.OdbcConnection(ConnectionString) connection.Open()
Dim adapter As New Odbc.OdbcDataAdapter("SELECT VLFR_MANCATO_INSERIMENTO_RAPPORTO.* FROM VLFR_MANCATO_INSERIMENTO_RAPPORTO;", connection)

Dim cb As New Odbc.OdbcCommandBuilder(adapter)
adapter.InsertCommand = cb.GetInsertCommand
adapter.DeleteCommand = cb.GetDeleteCommand
adapter.UpdateCommand = cb.GetUpdateCommand
adapter.Fill(D) D.Load(Dt.CreateDataReader)
adapter.Update(D) D.AcceptChanges()
End Using

Grazie anticipate per il vostro aiuto

Posts:811

--
27 lug 2010 22.00  
Aiuterebbe sapere con che tipo di database stai lavorando.
Quello che posso dirti osservando il codice è che il CommandBuilder non è il miglior strumento per costruire delle query su database.
Che un DataReader è per definizione Readonly e quindi è probabile che un Update sia difficilmente preso in considerazione.
Ti consiglio le seguenti cose:
1) Crea dei comandi di select, insert, update, delete per la tua tabella usando l'interfaccia di gestione del database (probabilmente anche il server explorer di Visual Studio è in grado di darti modo di scrivere delle query sul tuo database).
2) Crea i command, crea il dataadapter e poi crea un dataset con al suo interno una datatable.
3) Carica a manina una riga (DataRow r = MyDataTable.NewRow()) riempi i campi, aggiungi la datarow alla collezione Rows della datatable e prova un Update.
Se non funziona ancora, verifica di esserti connesso con un utente con sufficienti diritti sul database che vai ad usare.
saluti
Sabrina

Posts:663

--
28 lug 2010 07.30  

Ti ringrazio per la tua risposta ora ti illustro meglio quello che faccio.
Allora il mio programma è in WPF il quale ha il compito di passare delle informazioni di base ad una classe che poi elaborate opportunamente con altri dati provenienti dal database mi restituisce una datatable, la quale viene poi mostrata in una datagridview e se l'utente lo desidera salva i dati in una tabella del database. Il database (pultroppo non per mia scelta... grrrr grrr ) è un  Access .

Solitamente quando devo fare il salvataggio di una datatable in un database lo faccio utilizzando un command con un ciclo for che mi cicla tutta la datatable e ma la salva..però dato che voglio imparare qualcosa in più ho pensato di utilizzare un dataadapter in modo che si occupassa lui di fare il tutto.

Quindi dopo alcune ricerche ho creato il metodo che illustro di seguito

[code]
Dim ds As DataSet
Dim adapter As Odbc.OdbcDataAdapter

Using connection As New Odbc.OdbcConnection("dsn=pimm_master") ' connection.Open()
adapter = New Odbc.OdbcDataAdapter("SELECT VLFR_MANCATO_INSERIMENTO_RAPPORTO.* FROM VLFR_MANCATO_INSERIMENTO_RAPPORTO;", connection)
Dim cb As New Odbc.OdbcCommandBuilder(adapter)
adapter.InsertCommand = cb.GetInsertCommand
adapter.DeleteCommand = cb.GetDeleteCommand
adapter.UpdateCommand = cb.GetUpdateCommand
adapter.Update(ds, "VLFR_MANCATO_INSERIMENTO_RAPPORTO") ds.AcceptChanges()
connection.Close()
End Using
[/code]

Il problema è che comunque l'update non funziona e non capisco il perchè in quanto non mi restituisce nessun errore, In principio pensavo che fosse il commandbuilder ad avere problemi ma poi ho notato (in debug) che le query di Updatae, Insert e Delete le crea correttamente. Sembra quasi che il problema sia nella connessione come se non fosse connesso al database.

Dove sto sbagliando?

Prassi che ho seguito:

Problema: mi viene passato una datatable i cui dati devono essere inseriti in una prestabilita tabella di un database

1. Creo un dataset
2. Creo un dataAdapter
3. Creo e apro una connessione
4. Associo al mio adapter il command di SELECT
5. Utilizzo commandbuilder per crearmi le query di Update, Insert e Delete
6. Aggiungo un tabella al mio dataset   ?????

[code]
MioDataset.Tables.Add ("NomeTb")
[/code]

7. Devo popolare la tabella del dataset con il codice 

[code]
MioDataset.Tables("NomeTb").load (DataTablePassatami.CreateDataReader)
[/code]

8. Faccio l'updete al database dal dataset

[code]
adapter.Update(MioDataset, "NomeTb")
[/code]

E' questa la prassi ho sto sbagliando qualcosa? Mi sono perso qualche passaggio?

Grazie del vostro aiuto.


Posts:663

--
28 lug 2010 08.16  


Ho provato anche a cambiare approccio

appena mi viene passata la datatable la carico in un dataset con il seguente codice così da visuallizzarla nella datagrid

[code]
ds = New DataSet
ds.Tables.Add(dt)
ds.AcceptChanges() DataGrid1.DataContext = ds.Tables("VLFR_MANCATO_INSERIMENTO_RAPPORTO").DefaultView
[/code]

Infatti i dati vengono mostrati correttamente nella datagridview quando vado a fare il salvataggio

[code]
Using connection As New Odbc.OdbcConnection("dsn=pimm_master") connection.Open()
adapter = New Odbc.OdbcDataAdapter("SELECT VLFR_MANCATO_INSERIMENTO_RAPPORTO.* FROM VLFR_MANCATO_INSERIMENTO_RAPPORTO;", connection) Dim cb As New Odbc.OdbcCommandBuilder(adapter) adapter.InsertCommand = cb.GetInsertCommand adapter.DeleteCommand = cb.GetDeleteCommand adapter.UpdateCommand = cb.GetUpdateCommand
adapter.Update(ds, "VLFR_MANCATO_INSERIMENTO_RAPPORTO") ds.AcceptChanges()
connection.Close()
End Using
[/code]

Se non modifico nessun dato sulla datagird al lancio del metodo salva non fa perfettamente niente se invece effetuo qualche modifica mi restituisce l'errore
Violazione di concorrenza: UpdateCommand ha modificato 0 dei 1 record previsti

Non riesco a capire il perchè.

Non sei autorizzato ad inviare una risposta.

Active Forums 4.1
       
Articoli
Miniguida alla OOP con il .NET Framework- Parte IV
Come gestire l'ereditarietà
2009/07/17 | Autore: Alberto De Luca
SQL Server Nozioni base (parte 2)
Come creare un database in SQL Server Usando solo il codice SQL
2008/03/09 | Autore: Sabrina Cosolo
Lavorare con gli Array
Il problema dello zaino
2007/07/29 | Autore: Alberto De Luca
Briciole di ereditarietà
Come aggiungere ulteriori funzionalità alla TreeView personalizzata
2009/06/05 | Autore: Francesca Mazzoni
L'Albero degli elementi
Come iniziare a capire com'è fatto WPF (parte 3)
2007/08/13 | Autore: Patrizia Cosolo
Ereditarietà in pillole (Parte 1)
Come creare una TreeView personalizzata
2008/03/22 | Autore: Alberto De Luca
Introduzione a Windows Presentation Foundation (parte 2)
La prima di una serie di traduzioni da articoli di MSDN o altre fonti che offrono un punto di partenza per iniziare a capire il WPF.
2007/07/29 | Autore: Patrizia Cosolo
Panoramica degli elementi base del WPF
Come iniziare a capire com'è fatto il WPF [Windows Presentation Foundation] (parte 2)
2007/07/30 | Autore: Patrizia Cosolo
    Stampa     
Home|Forums|Blogs|Mappa del sito
© 2007-2010 by DotNetWork  .:.  Condizioni d'uso  .:.  Privacy  .:.  Accedi  .:.