Application de gestion de factures

3ING Messages postés 20 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 1 janvier 2011 - 22 déc. 2010 à 00:14
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 2 janv. 2011 à 14:49
Bonjour,
Je développe une application C# de gestion de factures.j'ai rencontré un problème et j'aimerais bien que quelqu'un m'aide à le résoudre.
Le problème réside dans le fait que j'ai toujours une exception qui se lance au niveau d'ouverture de la connexion à la base de données mais l'exception ne se déclenche pas pendant le chargement de l'application mais elle ne se lance que lorsque j'appuie sur l'un des bouttons que j'ai conçus (ajout, modification, suppression,recherche,..) :

exemple du code du boutton ajout des clients

private void btnadd_Click(object sender, EventArgs e)
{
int codeclt = int.Parse(tbcodeclt.Text);
string raisonsoc = tbraisonsociale.Text;
string adr = tbadresse.Text;
OdbcConnection conn new OdbcConnection("DSN DBpiecedet");
conn.Open();// c'est là où l'exception se déclenche
string req = "insert into client (code_client,raison_sociale,adresse) values('"+codeclt+"','"+raisonsoc+"','"+adr+"')";
OdbcCommand cmd = new OdbcCommand(req, conn);
cmd.ExecuteReader();
conn.close();
tbcodeclt.Text = "";
tbraisonsociale.Text = "";
tbadresse.Text = "";
}


N.B : Le DSN est configuré, la base de données est créee sur Access.

7 réponses

Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
22 déc. 2010 à 09:11
Salut,

Ne faut-il pas spécifier un utilisateur et indiquer son mot de passe? Cfr exemple MS.
Une petite remarque en passant, il ne faut pas utiliser la méthode ExecuteReader si tu ne récupères pas de résultat, ce qui est ton cas. Utilises plutôt la méthode ExecuteNonQuery.

Shao.
0
3ING Messages postés 20 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 1 janvier 2011
26 déc. 2010 à 17:03
Salut,
comment faire pour spécifier un utilisateur et indiquer un mot de passe? est-ce qu'il faut faire ça au niveau de la déclaration de la connexion ?
//OdbcConnection conn new OdbcConnection("DSN DBpiecedet");
j'ai essayé l'instruction ci-dessous mais ça n'a pas passé :
//OdbcConnection conn = new OdbcConnection("DSN=DBpiecedet","root","password"); ???
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
28 déc. 2010 à 23:42
Bonsoir

Si ton DSN est correctement configuré alors il doit contenir tous les parametres nécéssaires à la connexion.
Peux-tu nous donner le message de l'exception ?

try
{
conn.Open();// c'est là où l'exception se déclenche 
}
catch (Exception ex)
{
  //Récupere le contenu de ex.Message.
  
}


Bob.
C# is amazing, enjoy it!
0
3ING Messages postés 20 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 1 janvier 2011
30 déc. 2010 à 23:43
Salut,
Le DSN est correctement configuré mais j'ai rien mit dans les 2 champs (nom de connexion, mot de passe)je les ai laissé vide.est ce que je dois mettre ça?
Le contenu de ex.Message est :
ERROR [IM002] [Microsoft][Gestionnaire de pilotes ODBC] Source de données introuvable et nom de pilote non spécifié
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
31 déc. 2010 à 09:18
Bonjour

pour précisier un user/password avec un DSN, la syntaxe est "DSN=MyDSN;Uid=MyUsername;Pwd=MyPassword;"

Mais le message est étrange, car le DSN possede au minimum le type de driver, c'est comme si le DSN n'avait as été trouvé.

as-tu essayé des le faire sans le DSN ?
OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder();
builder.Driver = "Microsoft Access Driver (*.mdb)";
builder.Add("Dbq", "C:\\MyAccessDataBase.mdb"); 
// si la base est protegée par une user/password
builder.Add("Uid", "user");
builder.Add("Pwd", "password");

OdbcConnection conn = new OdbcConnection(builder.ConnectionString);


tu peux essayer de remplacer la clef DBQ par le DSN, mais je ne suis pas certaine que cela fonctionne
builder.Add("DSN", "DBpiecedet");// a la place de builder.Add("Dbq", "C:\\MyAccessDataBase.mdb"); 


Bob.
C# is amazing, enjoy it!
0
3ING Messages postés 20 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 1 janvier 2011
1 janv. 2011 à 21:24
Bonsoir

Non je n'ai pas essayé de le faire sans le DSN.
Mais ce que vous m'avez proposé fonctionne mais en remplaçant la clef Dbq par le DSN (avec la clef Dbq ça fonctionne pas) :

OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder();
builder.Driver = "Microsoft Access Driver (*.mdb)";
builder.Add("DSN", "DBpiecedet");
OdbcConnection conn = new OdbcConnection(builder.ConnectionString);
conn.Open();

Mais c'est quoi la différence entre OdbcConnectionStringBuilder et OdbcConnection ?pourquoi le code ci-dessus a foncitonné et le code suivant a déclenché une exception :
OdbcConnection conn new OdbcConnection("DSN DBpiecedet");
conn.Open();
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
2 janv. 2011 à 14:49
Bonjour

Si
OdbcConnection conn new OdbcConnection("DSN DBpiecedet");
conn.Open();
ne fonctionne pas c'est que la chaine de connexion est incomplete

La classe OdbcConnectionStringBuilder permet seulement de construire une chaine de connexion.
dans ton cas elle doit generer quelque chose comme "driver=Microsoft Access Driver (*.mdb);DSN=DBpiecedet"
tu peux le vérifier en regardant le contenu de builder.ConnectionString

Ce qui est étrange c'est que normalement le driver est défini dans le DSN, et donc tu ne devrais pas avoir à le préciser dans la chaine de connexion.
mais j'avoue ne pas être un spécialiste des DSN je ne les emploie jamais, en général je mets mes définitions de chaine de connexion dans les fichiers de configuration.

Bob.
C# is amazing, enjoy it!
0
Rejoignez-nous