PDA

View Full Version : [C# ASP.NET] Problema di aggiornamento DB con DataAdapter


Souls83
01-08-2008, 18:42
Ragazzi ho un problema che non riesco a risolvere, sto cercando di fare una semplice operazione di INSERT su un DataBase tramite il comando Update() di un dataadapter, ma non appena richiamo il comando mi viene fuori un'eccezione del tipo: "Errore di sintassi nell'istruzione INSERT INTO."

Questo è il codice che uso:
oleDbConn = new OleDbConnection();
oleDbConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + this.pathDB + ";";
oleDbConn.Open();
oleDbCom = new OleDbCommand();
oleDbCom.Connection = oleDbConn;
oleDbCom.CommandText = "SELECT Denominazione, CodiceFiscale, Indirizzo, Telefono, Email, Note FROM Clienti ORDER BY Denominazione";
oleDbAdapter = new OleDbDataAdapter(oleDbCom);
oleDbAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
this.myDataSet.Clear();
oleDbAdapter.Fill(myDataSet, "Clienti");
this.clients = myDataSet.Tables["Clienti"];
objCommandBuilder = new OleDbCommandBuilder(oleDbAdapter);
this.oleDbConn.Close();
// nuova riga
DataRow r = this.clients.NewRow();
for(int i = 0; i<this.fDets.textDetails.Length;i++)
r[i] = this.fDets.textDetails[i].Text;
this.clients.Rows.Add(r);

oleDbAdapter.InsertCommand = objCommandBuilder.GetInsertCommand();
oleDbAdapter.UpdateCommand = objCommandBuilder.GetUpdateCommand();
oleDbAdapter.DeleteCommand = objCommandBuilder.GetDeleteCommand();
oleDbAdapter.Update(myDataSet, "Clienti");
myDataSet.AcceptChanges();

Il database ha 6 campi di tipo testo, non è la prima volta che faccio un'applicazione del genere solo che non capisco dove possa essere il problema, qualcuno può aiutarmi?

Gremo
02-08-2008, 04:53
Non ne sono sicuro, ma non è che non possa generare automaticamente l'istruzione di insert perchè stai selezionando particolari colonne? Prova con SELECT *, o specifica manualmente la query di update.
In LINQ to SQL se abiliti l'insert o l'update non puoi specificare quali colonne reperire, devi accontentarti di *.

Souls83
02-08-2008, 13:35
Non ne sono sicuro, ma non è che non possa generare automaticamente l'istruzione di insert perchè stai selezionando particolari colonne? Prova con SELECT *, o specifica manualmente la query di update.
In LINQ to SQL se abiliti l'insert o l'update non puoi specificare quali colonne reperire, devi accontentarti di *.
Avevo già provato anche in questo modo e mi dava la stessa eccezione.
Ho scoperto dove sta il problema ma non capisco il perchè magari qualcuno di voi può illuminarmi.

Specificando manualmente l'InsertCommand non ho alcun problema di inserimento questo perchè la Query di inserimento la genero come: "INSERT INTO NomeTabella ([nomeColonna1], [nomeColonna2], ....) ..."
Utilizzando il OleDbCommandBuilder invece la query che mi viene generata e che mi da eccezione è nella forma "INSERT INTO NomeTabella (nomeColonna1, nomeColonna2, ....) ..." quindi senza parentesi quadre per le colonne e questo genera l'eccezione.
La cosa che non mi spiego è perchè in altre situazioni il CommandBuilder genera un comando corretto e qui no, qualcuno sa illuminarmi?