Julien_Gates
Messages postés9Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention15 novembre 2007
-
12 avril 2006 à 00:02
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 2008
-
8 mai 2006 à 12:12
Bonsoir
je ne comprend pas mon erreur venant d'une requete d'insertion dans une base de donnée en C# :
voici mon code :
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
try
{
conn.Open();
}
catch
{
MessageBox.Show("Notre connection n'est pas établit");
}
finally
{
int res;
System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand("INSERT INTO dej(numdej,date,numclient,Numchambre,nombch,nombfr,nomp) VALUES('"+Convert.ToString(nb+1)+"','"+cb2.Text+"','"+cb1.Text+"','"+cb3.Text+"','"+cb4.Text+"','"+cb5.Text+"','"+cb6.Text+"');", conn);
res=command.ExecuteNonQuery ();
}
l'erreur est la suivante : Une exception non gérée du type 'System.Data.OleDb.OleDbException' s'est produite dans system.data.dll
j'ai essayer de mettre de & a la place des + mais visual studio.net n'en a pas voulu je ne comprend d'ou vien cette erreur la requette me semble bonne j'ai reesayé plusieur foi sans résultat je bloque
En attendant votre réponse bonne soirée en vous remerciant d'avance
Julien_Gates
Messages postés9Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention15 novembre 2007 8 mai 2006 à 11:47
Jai réussi a faire marché mon code il manquai une ( ' ) a
un endroit et j'avais des cote ( ' ) dans ma table Access qui ne voulais pas
passé du coup j'ai arrangé le truc en faisant un replace ;)
voici le code corrigé des fois que cela puisse aidé quelqu'un un jour :
OleDbConnection conn = new OleDbConnection(@"PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=l:\hot.mdb");
try
{
conn.Open();
int r;
string req="INSERT INTO dejeuner(datedej, nchamb, nombch, nombfr, nomp )"+"VALUES('"+date.Text+"', '"+nchmb.Text+"', '"+bch.Text+"', '"+bfr.Text.Replace("'", "''")+"', '"+pat.Text+"');";
System.Data.OleDb.OleDbCommand inser = new System.Data.OleDb.OleDbCommand(req,conn);
r=inser.ExecuteNonQuery();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
this.Close();
menu m= new menu();
m.Show();
hlayachi
Messages postés62Date d'inscriptiondimanche 23 janvier 2005StatutMembreDernière intervention24 avril 2006 12 avril 2006 à 00:58
Bonsoir
d'abord j'aimerai te dire que la façon avec laquelle est écrit ton code est trop brouillée
ensuite y a un tout petit pb dans la requête, voilà ce que tu dois faire:
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 12 avril 2006 à 07:16
Salut, déja tu ne dois pas executer ta requête dans la close finally mais dans la close try. Petit rappel : la close finally est appelée après un bloc try mais aussi après un bloc catch.
try
{
// Ouvre la connexion..
// Requête..
}
catch ( Exception ex )
{
MessageBox.Show( ex.ToString( ) );
}
finally
{
// Ferme la connexion.
// Ou une close using dans le try.
}
Julien_Gates
Messages postés9Date d'inscriptionmardi 7 mars 2006StatutMembreDernière intervention15 novembre 2007 12 avril 2006 à 12:23
Merci pour vos réponse mais j'ai malheureusement toujours le
même problème je ne sais pas d'ou cela peut venir car j'ai
utiliser exactement le même protocole dans une autre base de donnée et je n'est
eu aucun problème
Tout mes champs dans ma base de donnée sont en texte.
Au début j'avais mit le premier champs en numéro auto et j'avais mit un
blanc dans mon INSERT INTO mais j'ai toujours la même erreur donc je ne
comprend pas .
hlayachi
Messages postés62Date d'inscriptiondimanche 23 janvier 2005StatutMembreDernière intervention24 avril 2006 12 avril 2006 à 17:05
Merci Lutinore d'avoir corriger mon oubli
Julien_Gates c'est vrai que la méthode ExecuteNonQuery () retourne un int, mais tu essayes de supprimer int r ; et d'appeler ExecuteNonQuery () comme si elle ne retourne rien.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 8 mai 2006 à 12:12
C'est en partie pour ca qu'il vaut mieux utiliser des requetes paramétrées plutot que de concatener des chaines pour construire une requete.
Et ca permet d'eviter des injections sql en prime.