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
Poblemi Update access
sabato 01 settembre 2007 - 07.11
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Pierluigi
Profilo
| Newbie
14
messaggi | Data Invio:
sab 1 set 2007 - 07:11
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
385
messaggi | Data Invio:
sab 1 set 2007 - 07:27
Ottiieni qualche eccezione?
Puoi postare un esempio della stringa sql contenente lo statement update
costruito con i vari valori?
Ciao, Michele
Pierluigi
Profilo
| Newbie
14
messaggi | Data Invio:
lun 3 set 2007 - 16:11
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
385
messaggi | Data Invio:
lun 3 set 2007 - 20:26
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
14
messaggi | Data Invio:
mar 4 set 2007 - 08:33
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
385
messaggi | Data Invio:
mar 4 set 2007 - 08:59
> 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
14
messaggi | Data Invio:
mar 4 set 2007 - 09:25
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
385
messaggi | Data Invio:
mar 4 set 2007 - 09:46
>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
14
messaggi | Data Invio:
mar 4 set 2007 - 10:53
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
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 !