[C#]Problema OleDB

mercoledì 12 settembre 2012 - 15.51

Skin Profilo | Newbie

Buongiorno a tutti! ;)
ho un problema con database in c#..mi spiego meglio..sto creando un piccolo applicativo per la gestione (moooolto basilare) di un ufficio..quindi "Gestione Clienti", "gestione fatture" ecc ecc. Il problema viene nel form dove ci sono le label, textbox e checkbox, quando premo il button "Salva" mi esce questo errore:
"SystemData.OleDb.OleDBException(0x80040E14) Errore di Sinstassi (Operatore Mancante) nell'espressione della query 'via della frutta'. Il codice che ho utilizzato nel button è questo:

http://pastebin.com/LQ41vYJE

Dove Sbaglio??

pieroalampi Profilo | Expert

hai provato a mettere un punto di interruzione in fase di debug dopo OleDbCommand cmd per vedere cosa c'è??? prova a metterlo su cmd.ExecuteNonQuery(); cosi vedi bene quello che esiste nel punto precedente, l'errore deve essere li per forza
------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

AntCiar Profilo | Expert

Ciao.

il problema sta nel come hai scritto la stringa SQL. Praticamente passi tutti i campi di tipo testo tra degli apici singoli (apostrofo). questo fa si che se stai salvando valori con all'interno uno o più apostrofi ti va in errore (ad esempio "via dell'unità").
Per risolvere il problema devi mettere al posto degli apici singoli i doppi apici.

esempio:



OleDbConnection conn = new OleDbConnection(constring);
try
{
conn.Open();
OleDbCommand cmd = new OleDbCommand("INSERT INTO Clienti(ID,Nome,Cognome,[Data Nascita],Indirizzo,Citta,Cap,Piva,CodFiscale,Dominio) VALUES (" +'1' + "," + char.ConvertFromUtf32(34) + textBox1.Text + char.ConvertFromUtf32(34) + "," + char.ConvertFromUtf32(34) + textBox2.Text + char.ConvertFromUtf32(34) + "," + char.ConvertFromUtf32(34) + textBox3.Text + char.ConvertFromUtf32(34) + ","+ char.ConvertFromUtf32(34) + textBox4.Text + char.ConvertFromUtf32(34) + "," + char.ConvertFromUtf32(34) + textBox5.Text + char.ConvertFromUtf32(34) "," + char.ConvertFromUtf32(34) + textBox6.Text + char.ConvertFromUtf32(34) + "," + char.ConvertFromUtf32(34) + textBox7.Text + char.ConvertFromUtf32(34) + "," + char.ConvertFromUtf32(34) + textBox8.Text + char.ConvertFromUtf32(34) + "," + char.ConvertFromUtf32(34) + textBox9.Text + char.ConvertFromUtf32(34) + ");",conn);
cmd.ExecuteNonQuery();
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.ToString());
}



Poi se vuoi fare una cosa molto più sistemata, utilizza le parametriche così ti togli da ogni problema di questo tipo

ciao
Cristian Barca

pieroalampi Profilo | Expert

AntCiar: servirebbe il tasto MI PIACE
------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

DomA Profilo | Expert

...oppure utilizzare il replace

Replace(textBox1.Text, "'", "''")

comq grazie AntCiar è un metodo che non conoscevo, anche se personalmente preferisco i parametri.


Ricorda che, accettare la risposta è un modo di ringraziare chi ci ha aiutato ed evidenziare che il problema è stato risolto.

http://www.infomidia.it

Domenico

Skin Profilo | Newbie

scusate per la tarda risposta e ringrazio tutti per le risposte che mi hanno aiutato moltissimo ;) ora nella compilazione mi appare System.data.oledb.oledbexception (0x80040E57):Overflow :/ può essere qualche tipologia di campo nel DB che è errata rispetto a quanto scritto nella textbox?

Grazie
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5