Base de données

Résolu
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 31 janv. 2006 à 10:54
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 - 1 févr. 2006 à 10:48
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

cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
31 janv. 2006 à 12:21
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#
*/
3
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
31 janv. 2006 à 15:37
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#
*/
3
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
1 févr. 2006 à 10:06
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#
*/
3
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 99
1 févr. 2006 à 10:28
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#
*/
3

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

Posez votre question
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
31 janv. 2006 à 14:41
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 ?
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
1 févr. 2006 à 09:53
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...
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
1 févr. 2006 à 10:22
Le mieux est que j'utilise une instance unique de sqlconnection alors ? pour faire plus propre
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
1 févr. 2006 à 10:48
ok, merci de ton aide
0