[C#] erreur dans un programme permettant d'inserer des données dans une base de [Résolu]

Julien_Gates 9 Messages postés mardi 7 mars 2006Date d'inscription 15 novembre 2007 Dernière intervention - 12 avril 2006 à 00:02 - Dernière réponse : MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention
- 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();

conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data source= c:\hot.mdb";

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
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Julien_Gates 9 Messages postés mardi 7 mars 2006Date d'inscription 15 novembre 2007 Dernière intervention - 8 mai 2006 à 11:47
3
Merci
J’ai 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();


}

merci bonne journée

Merci Julien_Gates 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 70 internautes ce mois-ci

Commenter la réponse de Julien_Gates
hlayachi 62 Messages postés dimanche 23 janvier 2005Date d'inscription 24 avril 2006 Dernière intervention - 12 avril 2006 à 00:58
0
Merci
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:


finally
{
int res;
string req = " insert into dej (numdej,date)" + " values (' " +Convert.ToString(nb+1)+ " ' , '"+cb2.Text+"')" ;

System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(req, conn);
res=command.ExecuteNonQuery ();


}



Ici j'ai pris seulement deux colonnes, tu fais la même chose pour le reste
Commenter la réponse de hlayachi
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 12 avril 2006 à 07:16
0
Merci
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.
}
Commenter la réponse de Lutinore
Julien_Gates 9 Messages postés mardi 7 mars 2006Date d'inscription 15 novembre 2007 Dernière intervention - 12 avril 2006 à 12:23
0
Merci
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 .




private void button1_Click(object sender, System.EventArgs e)

{






System.Data.OleDb.OleDbConnection conn = new
System.Data.OleDb.OleDbConnection();




conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data source=
c:\hot.mdb";



try

{

conn.Open();

int r;


string req = " insert into dej (numdej,date)" + "
values (' "+cb1.Text+"'+'"+cb2.Text+"')" ;


System.Data.OleDb.OleDbCommand command = new
System.Data.OleDb.OleDbCommand(req, conn);

r=command.ExecuteNonQuery ();

//opération d'ajout terminer





}

catch

{


MessageBox.Show("Notre connection n'est pas
établit");

}

finally

{

conn.Close();

}



}





Merci encore
Commenter la réponse de Julien_Gates
hlayachi 62 Messages postés dimanche 23 janvier 2005Date d'inscription 24 avril 2006 Dernière intervention - 12 avril 2006 à 17:05
0
Merci
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.
Commenter la réponse de hlayachi
Julien_Gates 9 Messages postés mardi 7 mars 2006Date d'inscription 15 novembre 2007 Dernière intervention - 12 avril 2006 à 17:29
0
Merci
Merci mais même comme cela j'ai toujours la même erreur

bonne soirée
Commenter la réponse de Julien_Gates
hlayachi 62 Messages postés dimanche 23 janvier 2005Date d'inscription 24 avril 2006 Dernière intervention - 12 avril 2006 à 17:59
0
Merci
en principe ça doit marcher
essaye de faire ceci: c'est la même chose mais des fois les erreurs logiques nous obligent de changer

tu ajoutes un using comme suit : using System.Data.Oledb;
ensuite fais cela dans un click


OleDbConnection conn = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=c:\hot.mdb");


conn.Open();


// je prends un champ text
string text1="aaa";



string req = " insert into dej (nomp)" + " values ('"+text1+"')" ;


OleDbCommand cmd = new OleDbCommand(req,conn);


cmd.ExecuteNonQuery();


conn.Close();
Commenter la réponse de hlayachi
Julien_Gates 9 Messages postés mardi 7 mars 2006Date d'inscription 15 novembre 2007 Dernière intervention - 18 avril 2006 à 23:51
0
Merci
Bonsoir,


merci pour vos réponses j'étais en déplacement je n'est pas
pu répondre tout de suite je suis arrivé a faire marché ma requête d'insertion
mais que une foi<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:11.25pt;
height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\Julien\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"
o:HREF="/imgs2/smile_blush.gif"/>
</v:shape><![endif]--><!--[if !vml]--> <!--[endif]-->.
<!--[if gte vml 1]><v:shape
id="_x0000_i1026" type="#_x0000_t75" alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\Julien\LOCALS~1\Temp\msohtml1\01\clip_image002.gif"
o:HREF="/imgs2/smile_angry.gif"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
Seulement après il ma refait la même erreur alors que je n'avais pas changé le code .



Je ne comprend vraiment pas pourquoi il ne veut pas marché .



Voici mon nouveau code avec mes nouvel amélioration qui a marché une foi:



System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();




conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data
source= c:\hot.mdb";



try

{

conn.Open();



int r;






string req="INSERT INTO dejeuner(datedej, ncli, nchamb, nombch,
nombfr, nomp )VALUES('"+date.Text+"', '"+Ncli.Text+"',
'"+nchmb.Text+"', '"+bch.Text+"', '"+bfr.Text+", '"+pat.Text+"');";


System.Data.OleDb.OleDbCommand inser = new
System.Data.OleDb.OleDbCommand(req,conn);

r=inser.ExecuteNonQuery();

//opération d'ajout terminer

}

catch

{

MessageBox.Show("erreur002");

}

finally

{

conn.Close();





}



Je ne comprends pas pourquoi il me fait toujours la même erreur.



Je n'est pas encore essayé la solution du dessus je testerai et vous tiendrai au courant.



Merci bonne soirée

<!--[if gte vml 1]><v:shape
id="_x0000_i1027" type="#_x0000_t75" alt="" style='width:11.25pt;height:11.25pt'>
<v:imagedata src="file:///C:\DOCUME~1\Julien\LOCALS~1\Temp\msohtml1\01\clip_image003.gif"
o:HREF="/imgs2/smile_sleepy.gif"/>
</v:shape><![endif]-->
Commenter la réponse de Julien_Gates
Julien_Gates 9 Messages postés mardi 7 mars 2006Date d'inscription 15 novembre 2007 Dernière intervention - 19 avril 2006 à 00:06
0
Merci
Re



je vien de testé les conseils de [auteurdetail.aspx?ID=430916 hlayachi] visiblement l'insertion ne marche toujours pas .



j'ai testé la requete sous access elle semble correct. Je ne voit vraiment pas d'ou peut provenir l'erreur.



Peut etre faut il compté le nombre de ligne pour inserer au bon momment les nouvels informations ?



Merci bonne soirée.
Commenter la réponse de Julien_Gates
hlayachi 62 Messages postés dimanche 23 janvier 2005Date d'inscription 24 avril 2006 Dernière intervention - 19 avril 2006 à 00:57
0
Merci
chez moi ça marche. ouvre un nouveau projet et essaye de faire ce que j'ai suggéré.

à mon avi le problème existe dans les types des enregistrements, c'est pourquoi moi j en ai pris seulement deux, càd pour essayer et puis généraliser

c'est quoi ça:
<!--[if !vml]--> <!--[endif]-->.
<?XML:NAMESPACE PREFIX = V /><V:SHAPE id=_x0000_i1026 alt="" type="#_x0000_t75"><V:IMAGEDATA o:HREF="/imgs2/smile_angry.gif" src="file:///C:\DOCUME~1\Julien\LOCALS~1\Temp\msohtml1\01\clip_image002.gif"></V:IMAGEDATA></V:SHAPE><!--[if !vml]--><!--[endif]-->
Commenter la réponse de hlayachi
Julien_Gates 9 Messages postés mardi 7 mars 2006Date d'inscription 15 novembre 2007 Dernière intervention - 19 avril 2006 à 10:05
0
Merci
c'est quoi ça:
<!--[if !vml]--> <!--[endif]-->.
<?XML:NAMESPACE PREFIX = V /><V:SHAPE id=_x0000_i1026 alt="" type="#_x0000_t75"><V:IMAGEDATA o:HREF="/imgs2/smile_angry.gif" src="file:///C:\DOCUME~1\Julien\LOCALS~1\Temp\msohtml1\01\clip_image002.gif"></V:IMAGEDATA></V:SHAPE><!--[if !vml]--><!--[endif]-->

Je ne sais pas visiblement sa c'est mit a l'édition du message .

Je vais re testé .

Merci

Bonne journée
Commenter la réponse de Julien_Gates
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 8 mai 2006 à 12:12
0
Merci
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.



Mx
MVP C#
Commenter la réponse de MorpionMx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.