Poblemi Update access

sabato 01 settembre 2007 - 07.11

Pierluigi Profilo | Newbie

Salve a tutti, innanzitutto mi scuso se ho sbagliato sezione (è il mio primo topic!).

Sto realizzando una piccola applicazione in c# per la mia squadra di rugby e non riesco ad aggiornare la tabella giocatori su db access con il comando update. Dopo che l'utente seleziona il giocatore che vuole aggiornare da una comboBox, deve poi aggiornare i campi compilando delle TextBox. Grazie.
Il codice è il seguente :

private void button1_Click(object sender, EventArgs e)
{
OleDbConnection conn = null;
OleDbCommand cmd = null;
//OleDbDataReader dr = null;
try
{
conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;datasource=C:/Users/pierluigi/Desktop/database/marco.mdb");
conn.Open();
System.Console.WriteLine("Connessione aperta sul db");

string sql = "update Giocatori set Ruolo='" + textBox1.Text + "',NatoA='" + textBox2.Text + "',Il='" + textBox3.Text + "',ResidenteA='" + textBox4.Text + "',Indirizzo='" + textBox5.Text + "',Cellulare='" + textBox6.Text + "',Telefono='" + textBox7.Text + "',Email='" + textBox8.Text + "',Mancino='" +
textBox9.Text + "' where Giocatori='" + comboBox1.Text.Substring(0, comboBox1.Text.IndexOf(" ", 0, comboBox1.Text.Length)) + "'";



System.Console.WriteLine(sql);
cmd = new OleDbCommand(sql, conn);
System.Console.WriteLine("Stringa sql eseguita");
//dr = cmd.ExecuteReader();
System.Console.WriteLine("Scrivo nella tabella Giocatori");
label11.Text = "Dati inviati correttamente";
}
catch (Exception ex)
{
System.Console.WriteLine("EX " + ex.ToString());
}
finally
{
//dr.Close();
conn.Close();
System.Console.WriteLine("Connessione chiusa");
}
}

micto27 Profilo | Senior Member

Ottiieni qualche eccezione?

Puoi postare un esempio della stringa sql contenente lo statement update
costruito con i vari valori?

Ciao, Michele

Pierluigi Profilo | Newbie

Ciao,
ti posto l'output di visual studio, dopo che ho effettuato il debug.

Connessione aperta sul db
update Giocatori set Ruolo='aaa',NatoA='aaaa',Il='aaa',ResidenteA='aaa',Indirizzo='aaa',Cellulare='aaa',Telefono='aaa',Email='aaa',Mancino='aaa' where Giocatori='1'
Stringa sql eseguita
Scrivo nella tabella Giocatori
Connessione chiusa

Prima di effettuare questa connessione al DB, ne faccio un'altra, solamente,per caricare la comboBox che serve nella finestra a selezionare il giocatore di cui si vuole modificare i dati. Non penso che questo comunque influisca con l'update.
Eccezioni non ne da, e i dati dalla comboBox li prende in maniera giusta perchè il giocatore che seleziono corrisponde al numero 1 presente nel where.
Grazie.

micto27 Profilo | Senior Member

cmd = new OleDbCommand(sql, conn);
System.Console.WriteLine("Stringa sql eseguita");
//dr = cmd.ExecuteReader();
System.Console.WriteLine("Scrivo nella tabella Giocatori");

Ciao,
riprendendo un pezzo del codice noto che esegui il
comando (anche se l'istruzione è commentata) con il metodo ExecuteReader(),
nel tuo caso però non devi ottenere un oggetto SqlDataReader.
Dovendo eseguire un UPDATE utilizza cmd.ExecuteNonQuery().

Michele

Pierluigi Profilo | Newbie

Ciao,
ho seguito il tuo consiglio però non è cambiato nulla.
Ho provato a rifare la stessa tabella cambiando il nome e scrivendo i campi tutti in maiuscolo, sai a volte capita che non ti prende dei comandi per motivi del genere, però il problema non è quello.
Sicuramente sarà qualche cosina che ancora mi sfugge.
Ti posto il codice integrato del tuo consiglio precedente.
Grazie

private void button1_Click(object sender, EventArgs e)
{
OleDbConnection conn = null;
OleDbCommand cmd = null;
//OleDbDataReader dr = null;
try
{
conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;datasource=C:/Users/pierluigi/Desktop/database/marco.mdb");
conn.Open();
System.Console.WriteLine("Connessione aperta sul db");

string sql = "update Giocatori set Ruolo='" + textBox1.Text + "',NatoA='" + textBox2.Text + "',Il='" + textBox3.Text + "',ResidenteA='" + textBox4.Text + "',Indirizzo='" + textBox5.Text + "',Cellulare='" + textBox6.Text + "',Telefono='" + textBox7.Text + "',Email='" + textBox8.Text + "',Mancino='" +
textBox9.Text + "' where Gioc='" + comboBox1.Text.Substring(0, comboBox1.Text.IndexOf(" ", 0, comboBox1.Text.Length)) + "'";



System.Console.WriteLine(sql);
cmd = new OleDbCommand(sql, conn);
System.Console.WriteLine("Stringa sql eseguita");
cmd.ExecuteNonQuery();
System.Console.WriteLine("Scrivo nella tabella Giocatori");
label11.Text = "Dati inviati correttamente";
} catch (Exception ex)
{
System.Console.WriteLine("EX " + ex.ToString());
}
finally
{
//dr.Close();
conn.Close();
System.Console.WriteLine("Connessione chiusa");
}
}

micto27 Profilo | Senior Member


> private void button1_Click(object sender, EventArgs e)
> {
> OleDbConnection conn = null;
> OleDbCommand cmd = null;
> //OleDbDataReader dr = null;
> try
> {
>conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;datasource=C:/Users/pierluigi/Desktop/database/marco.mdb");
> conn.Open();
>System.Console.WriteLine("Connessione aperta sul db");
>
>string sql = "update Giocatori set Ruolo='" + textBox1.Text +
>"',NatoA='" + textBox2.Text + "',Il='" + textBox3.Text + "',ResidenteA='"
>+ textBox4.Text + "',Indirizzo='" + textBox5.Text + "',Cellulare='"
>+ textBox6.Text + "',Telefono='" + textBox7.Text + "',Email='"
>+ textBox8.Text + "',Mancino='" +
>textBox9.Text + "' where Gioc='" + comboBox1.Text.Substring(0,
>comboBox1.Text.IndexOf(" ", 0, comboBox1.Text.Length)) + "'";
>
>
>
> System.Console.WriteLine(sql);
> cmd = new OleDbCommand(sql, conn);
>System.Console.WriteLine("Stringa sql eseguita");
> cmd.ExecuteNonQuery();
>System.Console.WriteLine("Scrivo nella tabella Giocatori");
> label11.Text = "Dati inviati correttamente";
> } catch (Exception ex)
> {
>System.Console.WriteLine("EX " + ex.ToString());
> }
> finally
> {
> //dr.Close();
> conn.Close();
>System.Console.WriteLine("Connessione chiusa");
> }
> }

Prova a valutare il risultato del metodo cmd.ExecuteNonQuery()
che ti da il numero di righe trattate con il comando.
Se tale risutato = 0 e non ottieni eccezioni in esecuzione
sei sicuro che la clausola WHERE identifichi correttamente la/le riga/righe che vuoi
modificare?

Se esegui lo statement generato dal codice direttamente in Access funziona?

Ciao, Michele

Pierluigi Profilo | Newbie

Ciao,
il risultato del cmd.ExecuteNonQuery() è 0.
In Access ho notato che quando faccio il where il numero dell'id del giocatore non va messo tra apici singoli, come invece avviene in visual studio.
Magari è solo quello, anche se non penso.
Grazie

micto27 Profilo | Senior Member

>Ciao,
>il risultato del cmd.ExecuteNonQuery() è 0.
>In Access ho notato che quando faccio il where il numero dell'id
>del giocatore non va messo tra apici singoli, come invece avviene
>in visual studio.
>Magari è solo quello, anche se non penso.
>Grazie

Potrebbe benissimo essere.

Ti do' un paio di alternative al modo che hai usato per preparare il comando:

una è quella di utilizzare la collezione Parameters del comando per passare i valori e anche per avere
una maggiore leggibilità dello statement sql.

non volendo usare i parameters un'altra soluzione potrebbe essere quella di definire la stringa sql con una serie
di segnaposto da tradurre poi con a funzione String.Format(......)
ad esempio "update tabella set col1 = '{0}', col2 = {1} where id = {2}" passando poi alla funzione Format i valori da sostituire
ai segnaposto in un array di oggetti, con criterio posizionale {0} = array(0), {1}=array(1), ecc.

ciao, Michele

Pierluigi Profilo | Newbie

Ciao,
alla fine era un problema di Virgolette nel Where.
Grazie mille per il tuo aiuto, la prox volta cercherò di stare più attento, così guadagno anche tempo.
Grazie ancora
Ciao ciao
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