Base de données

[Résolu]
Signaler
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
-
Bonjour à tous,

J'ai un logiciel qui utilise une base de données sql server et je me sers de sqlconnexion, sqldatareader, sqlexecutenonquery pour écrire et lire dans ma base, mais le problème est que à tout moment la connexion entre mon logiciel et la base de données peut être rompu. Quel est à votre avis le meilleur moyen de gérer cela ? En attrapant l'exeception sqlexeception à chaque fois que je lis ou que j'ecris dans la base et en faisant remonter l'erreur ?

Par avance, merci.

8 réponses

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

La levée d'exception est couteuse.
Tu peux tester l'état de la connexion via la propriété State de SqlConnection (tout en gardant la gestion d'erreur naturellement :-) )

/*
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
93
L'arrêt brutal du serveur n'est pas une condition normale d'execution, l'état n'est pas mit à jour, d'où la présence de la gestion d'erreur en supplément.

Sinon pour ta méthode de test tu passes toujours par une nouvelle instance de SqlConnection alors forcément tu auras toujours la séquence Closed/Open.

/*
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
93
Si tu utilises plusieurs instances tu auras de toutes façons plusieurs connexions...
Et pour le cas du cable, c'est ce que je disais : c'est pour ça qu'on gère les erreurs en supplément du test d'état.

/*
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
93
Ca dépend.
Si l'accès aux données est intensif oui, autant tenter de garder la connexion ouverte.
En revanche si il s'agit d'un accès assez espacé, il peut être plus interessant de tout faire en local.

/*
coq
MVP Visual C#
*/
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
Merci de ta réponse, mais il y a un truc qui m'echappe avec sqlconnection, par exemple je fais :

// Fonction de Test

SqlConnection sqlconnection = new SqlConnection() ;
sqlconnection.ConnectionString = bdd.get_ConnexionString() ;

MessageBox::Show(Convert.ToString(sqlconnection.State)) ;

sqlconnection.Open() ;

MessageBox.Show(Convert.ToString(sqlconnection.State)) ;

sqlconnection.Close() ;

Si sqlserver est lancé et que j'execute cette fonction, ca va me sortir 0 puis 1, ce qui est logique. Seulement si juste après j'arrete sqlserver et que je reexecute cette fonction ca me ressort 0 puis 1 alors que sqlserver n'est plus actif. Et si je lance mon programme avec sqlserver non demarré et que j'execute cette fonction ca me sert 0 puis au moment de faire : sqlconnection.Open() ca me fait une erreur "Une exception non gérée du type 'System.Data.SqlClient.SqlException' s'est produite dans system.data.dll".

Qu'en penses tu ? est ce que j'utilise mal sqlconnection ?
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
Le mieux est d'utiliser une instance unique de sqlconnection ? Sinon il peut arriver que le cable réseau qui reli le client au serveur se debranche donc dans ce cas je pense que je n'ai pas d'autre choix que d'attraper les exceptions chaque fois que je fais un sqldatareader ou un sqlexecutenonquery...
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
Le mieux est que j'utilise une instance unique de sqlconnection alors ? pour faire plus propre
Messages postés
903
Date d'inscription
mercredi 23 février 2005
Statut
Membre
Dernière intervention
16 juin 2010
2
ok, merci de ton aide