Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
[mysql] Problema con DataAdapter
domenica 10 maggio 2009 - 18.28
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
kenshin
Profilo
| Newbie
2
messaggi | Data Invio:
dom 10 mag 2009 - 18:28
Ciao a tutti,
ho una piccola applicazione in C# che usa SqlExpress 2008 e per studio la sto portando su Mysql 5.1.30, usando il Mysql Connector/Net 5.2.
Lo scenario è semplice:
1) ho creato la tabella sul mysql e l'ho testata manualmente
2) utilizzando un DataAdapter (da) popolo un DataSet (ds) con una tabella (spese).
3) popolo un DataGridView (dgv) con il contenuto della tabella: dgv.DataSource = ds.Tables["spese"];
4) modifico il contenuto del DataGridView alterando le righe ed inserendone di nuove
...fin qui tutto bene, il problema nasce quando voglio allineare il db al DataGridView.
Per farlo uso la seguente istruzione: da.Update(ds, "spese");
Come risultato ottengo sempre il seguente errore: "InvalidOperationException", "Update richiede un UpdateCommand valido se l'insieme DataRow viene passato con righe modificate." o "Update richiede un InsertCommand valido se l'insieme DataRow viene passato con righe nuove."
Più in dettaglio:
System.InvalidOperationException non è stata gestita
Message="Update richiede un UpdateCommand valido se l'insieme DataRow viene passato con righe modificate."
Source="System.Data"
StackTrace:
in System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
in System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
in System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
in System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
in System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
in FamilyManager.Form1.Salva_Click(Object sender, EventArgs e) in D:\Visual Studio 2008 Projects\FamilyManager\FamilyManager\Form1.cs:riga 506
in System.Windows.Forms.Control.OnClick(EventArgs e)
in System.Windows.Forms.Button.OnClick(EventArgs e)
in System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
in System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
in System.Windows.Forms.Control.WndProc(Message& m)
in System.Windows.Forms.ButtonBase.WndProc(Message& m)
in System.Windows.Forms.Button.WndProc(Message& m)
in System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
in System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
in System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
in System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
in System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
in System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
in System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
in System.Windows.Forms.Application.Run(Form mainForm)
in FamilyManager.Program.Main() in D:\Visual Studio 2008 Projects\FamilyManager\FamilyManager\Program.cs:riga 18
in System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
in System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
in Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
in System.Threading.ThreadHelper.ThreadStart_Context(Object state)
in System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
in System.Threading.ThreadHelper.ThreadStart()
InnerException:
Le query in MySql sono corrette poichè ho provato ad eseguirle manualmente (fuori dal DataAdapter) ed ottengo il risultato corretto, inoltre ho provato a crearle con un CommandBuilder, ma il risultato non è cambiato.
Posso aggiungere che l'algoritmo è corretto poichè con MSSQL funziona tutto correttamente... non riesco proprio ad uscirne!
Potete darmi qualche suggerimento?
Grazie in anticipo!!!
Kenshin
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
dom 10 mag 2009 - 21:12
Ciao Stefano.
Il problema, probabilmente, si riduce solo ad un uso sbagliato del commanbuilder, ma per questo, dovremmo vedere il codice che hai scritto.
Fatto sta, che l'errore lo ricevi di sicuro e semplicemente perchè non sono istanziati i command di Insert,Delete,Update.
In questo caso, le strade sono due:
1. O li istanzi e li valorizzi tu a manina
.
2. O, più semplicemente, lasci fare tutto al commandbuilder, usandolo correttamente, quindi, assicurati di assegnare il dataadapter al commandbuilder prima di eseguire il Fill ed assicurati che nella tabella ci sia un campo con chiave primaria.
Nel prossimo post, mostra un pò di codice sul quale possiamo ragionare.
Facci sapere...
Ciao
kenshin
Profilo
| Newbie
2
messaggi | Data Invio:
lun 11 mag 2009 - 00:38
Ciao Jeremy,
ripulendo il codice per includerlo nel post mi sono accorto di un errore talmente grande da non riuscire a vederlo: per l'update stavo utilizzando un altro dataadapter non inizializzato.
Corretto questo erroraccio vergognoso ora tutto funziona correttamente.
Mi scuso per il post poco furbo.
Grazie mille per la risposta!
Stefano
Torna su
Stanze Forum
Elenco Threads
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 !