DataAdapter,UpdateCommand e cambi bool di Access

martedì 12 luglio 2005 - 12.11

astroman Profilo | Junior Member

Ho un problema ad aggiornare un DB Access 2003 con il comando UpdateCommand del oledbdatadapter..l'ho già usato e quindi non è che lo imposto male...il problema è che non devo passare nessun parametro alla query ma lanciarla e basta...è tipo "UPDATE TBL SET VALORE=1 WHERE ID=4" dove il valore è un campo SI/NO di Access...ma ogni volta che la lancio mi va in errore...ho provato a mettere VALORE=-1 ma niente...mi potete dare qualche consiglio?Sono abbastanza disperato...va in errore quando chiamo il comando executenonquery....

Brainkiller Profilo | Guru

Attenzione se stai usando un DataAdapter è una cosa un po' diversa non puoi lanciare query che vuoi tu. Se hai un DataAdapter si presume sia collegato ad un DataSet e le varie query nell'UpdateCommand, InsertCommand e via di seguito sono ad Hoc per sincornizzare il DataSet con la base di dati (Access, SQL o altro).

Quindi per eseguire una Query tua personalizzata dovresti usare un SqlCommand.

ciao

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

astroman Profilo | Junior Member

Scusa ma non sono d'accordo...io in pratica uso 3 oggetti come da guida microsoft.Ti riporto l'esempio in questione

public static OleDbDataAdapter CreateCustomerAdapter(OleDbConnection conn)
{
OleDbDataAdapter da = new OleDbDataAdapter();
OleDbCommand cmd;
OleDbParameter parm;

// Create the SelectCommand.

cmd = new OleDbCommand("SELECT * FROM Customers " +
"WHERE Country = @Country AND City = @City", conn);

cmd.Parameters.Add("@Country", OleDbType.VarChar, 15);
cmd.Parameters.Add("@City", OleDbType.VarChar, 15);

da.SelectCommand = cmd;

// Create the UpdateCommand.

cmd = new OleDbCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
"WHERE CustomerID = @oldCustomerID", conn);

cmd.Parameters.Add("@CustomerID", OleDbType.Char, 5, "CustomerID");
cmd.Parameters.Add("@CompanyName", OleDbType.VarChar, 40, "CompanyName");

parm = cmd.Parameters.Add("@oldCustomerID", OleDbType.Char, 5, "CustomerID");
parm.SourceVersion = DataRowVersion.Original;

da.UpdateCommand = cmd;

return da;
}

Non vedo dataset...o sto capendo male io?
Ho 1 pò di confusione con questi oggetti...ma non esiste un modo per aggiornare velocemente un DB senza dover aprire e fare tutte queste operazioni?!?

astroman Profilo | Junior Member

questo è il codice che funziona senza problemi...

OleDbConnection cn = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand();
OleDbDataAdapter da = new OleDbDataAdapter();

cn.ConnectionString=gu.actualConn;
cn.Open();
da.UpdateCommand=cmd;
da.UpdateCommand.CommandText="UPDATE TBL SET FieldDefault=1 WHERE Id=" + IDElement.ToString();
da.UpdateCommand.Connection=cn;
da.UpdateCommand.ExecuteNonQuery();

Alla fine sapere cos'è che non andava bene?Che avevo sbagliato la query!:D

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