Tester la connection a une base de données

Signaler
Messages postés
85
Date d'inscription
samedi 20 novembre 2004
Statut
Membre
Dernière intervention
18 juin 2009
-
Messages postés
85
Date d'inscription
samedi 20 novembre 2004
Statut
Membre
Dernière intervention
18 juin 2009
-
salut voila je voudrai tester la connection à ma base de donnée dans une fonction mais ça marche pas.

voila un ti bout de code
*********************************************
public int ConOuv()
{
try
{
//voic ma chaine de connection
string chaineDeConnection = @"DSN=PostgreSQL ANSI;...";
OdbcConnection connection = new OdbcConnection();
connection.ConnectionString = chaineDeConnection;
connection.Open();
return 1;
}
catch
{
return 0;
}
}
.....


.....
public int TestCon()
{


//test de la connection
if(connection.State=System.Data.ConnectionState.Open)
{
return 0;
}
else
{
return 1;
}
}
********************************************


mais il aime pas le connection.State
ma connection marche umpec les requetes marchent super c'est juste que je voudrai faire une fonction qui me test ma connection

voila si une âme charitable passe par là merci

7 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Salut,

Tu voulais probablement utiliser l'opérateur d'égalité et non celui d'assignation.

/*
coq
MVP Visual C#
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Ah oui et ne perd pas de vue que l'état change seulement en cas de déconnexion propre, pas en cas de rupture du lien, donc gère quand même les exceptions :-)

/*
coq
MVP Visual C#
*/
Messages postés
85
Date d'inscription
samedi 20 novembre 2004
Statut
Membre
Dernière intervention
18 juin 2009

exact merci le coq
mais il plante quant meme au if
peut etre faudrait il que je passe en parametre connection dans TestCon()?? ou que je declare en public connection dans ma classe???

*********************************************
public int ConOuv()
{
try
{
//voic ma chaine de connection
string chaineDeConnection = @"DSN=PostgreSQL ANSI;...";
OdbcConnection connection = new OdbcConnection();
connection.ConnectionString = chaineDeConnection;
connection.Open();
return 1;
}
catch
{
return 0;
}
}
.....
.....
public int TestCon()
{


//test de la connection
if(connection.State!=System.Data.ConnectionState.Open)
{
return 0;
}
else
{
return 1;
}
}
********************************************
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
"mais il plante quant meme au if"
Ok...
Message du compilateur ?
ou
Exception au runtime ?

/*
coq
MVP Visual C#
*/
Messages postés
85
Date d'inscription
samedi 20 novembre 2004
Statut
Membre
Dernière intervention
18 juin 2009

c'est une exception au runtime voila le message

**********************************************
Une exception non gérée du type 'System.NullReferenceException' s'est produite dans WindowsApplication3.exe


Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.
**********************************************
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Ah ok, je n'avais pas vue la nouvelle déclaration dans la méthode ConOuv...
Ton membre "connection" n'est jamais instantié, comme tu en déclares un nouveau dans cette méthode.

public int ConOuv()
{
try
{
//voic ma chaine de connection
string chaineDeConnection = @"DSN=PostgreSQL ANSI;...";
connection = new OdbcConnection();
connection.ConnectionString = chaineDeConnection;
connection.Open();
return 1;
}
catch
{
return 0;
}
}

Et dans ta méthode TestCon, commence par tester la nullité avant de faire une action :
public int TestCon()
{
int ret = 0;

if ( this.connection != null)
{
//test de la connection
if(connection.State!=System.Data.ConnectionState.Open)
{
ret = 0;
}
else
{
ret = 1;
}
}
else
{
ret = 0;
}

return ret;
}

Par contre si ton retour est simplement de type vrai/faux, pourquoi utiliser un int au lieu d'un bool ?

PS : et tu devrais aussi éviter la chaine de connexion en dur dans le code.

/*
coq
MVP Visual C#
*/
Messages postés
85
Date d'inscription
samedi 20 novembre 2004
Statut
Membre
Dernière intervention
18 juin 2009

Super merci mec