Accueil
Java Standard Edition
Java EE 5
Visual Basic .Net 2005
Visual C++ .Net 2005
Visual C# .Net 2005
Cours ASP .Net 2.0
Postgresql
Linux
Visual Studio 2008
ASP 3.0 Classique
Cours Javascript - DOM - DHTML
Cours Ajax
VBA
Assembleur
Perl
Membres
L'auteur du site
Nouveautés sur le site
Contacts
Plan du site
Exécution d'un programme
Les archives Jar
Les classes abstraites
Les interfaces
Les tableaux
La généricité
Les énumérations
Les classes internes
Classes anonymes et internes locales
E/S(1):InputStream et OutputStream
E/S(2):FileInputStream et FileOutputStream
E/S(3):Reader et Writer
E/S(4):FilterInputStream et FilterOutputStream
E/S(5):Les filtres d'octets: PrintStream
E/S(6):Les filtres d'octets: DataInputStream et DataOutputStream
E/S(7):Les filtres d'octets: BufferedInputStream et BufferedOutputStream
E/S(8):Flux de caractères: PrintWriter
E/S(9):Flux de caractères: FilterReader et FilterWriter
E/S(10):Flux de caractères: InputStreamReader, OutputStreamWriter, StreamDecoder, StreamEncoder
E/S(11):Flux de caractères: BufferedReader et BufferedWriter
E/S(12):Flux de caractères: FileReader et FileWriter
La classe String (java.lang)
Les collections: L'interface Collection(java.lang)
Les collections(2): L'interface List(java.util)
Les collections(3): AbstractCollection(java.util)
Les collections(4): AbstractList(java.util)
La bibliothèque Swing en Java
Les bases de données en Java
JDBC ( Java Database Connectivity )
Les interfaces graphiques
Les fichiers de configuration en Java
INSTALLATION JAVA EE 5, JRE 6, ECLIPSE, TOMCAT, ETC SOUS LINUX
INSTALLATION JAVA EE 5, JRE 6, ECLIPSE, TOMCAT, ETC SOUS WINDOWS
Les applications Web en java
Les filtres Java (javax.servlet.Filter)
I Généralités
I.1 Le formulaire principal
I.2 Les objets créés par Visual
I.3 Les variables références
I.4 Le garbage collector
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Applications winforms
I.2 Applications MFC
I.3 Objets managés ou pas
I.4 Objets non managés
I.5 Objets managés - handle
I.6 Le top-level ^
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Puissant et Accessible
I.2 Créer ses classes
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
III Les services Windows
IV Le .net remoting
V Communication Tcp avec TcpClient et TcpListener
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Un EDI formidable
I.2 Inclure C# ou VB
I.3 L'objet Response
I.4 Les évènements
II ASP .net et les bdd
II.1 Essayer plusieurs fois la requête
I 2.1 Fichiers distincts
I.2.2 Avec la balise script
I.2.3 Inclure réellement
I.2.4 Avec Response.Write()
I.3.1 La méthode Response.Redirect()
I.4.1 Résoudre problème post
Installation Postgre Linux
Cours Postgresql
Le Shell Unix( Linux, Ubuntu)
Les scripts C-Shell
Programmation système Unix
Reseau Linux
Les iptables
Windows Presentation Foundation(WPF)
Le Framework 3.0
Windows Workflow Foundation(WF)
ASP 3.0 Classique
Cours Javascript - DOM - DHTML
Chat Ajax
VBA Excel 2003
Assembleur
Perl
Inscription
Liste membres
Livre d'or
Forum
Accueil
>
Cours ASP .Net 2.0
>
II ASP .net et les bdd
____________________________________________________________________________________________________
Connexion
II) ASP .net et les bases de données
II.1) Essayer plusieurs fois les requêtes, quand perte de connexion( "lost connexion during query" )
Il peut arriver, lorsque vous faites une requête sql dans asp .net, que vous perdiez la connexion durant la requête. Il se produit alors l'erreur suivante:
"lost connexion during query"
. J'ai rencontré ce problème avec une base MySQL, sur un hébergeur asp .net 2.0 . Mais quand j'exécutais le site en local, l'erreur ne se produisait pas.
Lors d'un appel à la méthode .fill d'un data adapter, par exemple, l'erreur arrivait, et la requête était, bien entendu, interrompue. Cela pouvait arriver aussi lors d'un insert de la méthode ExecuteNonQuery. La seule possibilité de s'en sortir pour l'internaute utilisateur du site, était d'actualiser la page par F5. Il faut remarquer que lorsque cela arrivait, l'erreur ne se reproduisait jamais lors de l'essai suivant. Le site restait donc utilisable, mais son utilisation était assez fastidieuse, et un peu problématique pour le novice.
Je précise que cela m'est arrivé sur une base MySQL avec une liaison ODBC, et en C#.
Un moyen pour s'en sortir définitivement et efficacement, est de recommencer( par programme) une deuxième fois la requête, lorsque le problème arrive. Cela se révèle très efficace, et règle complètement le problème. Le délai d'attente pour l'internaute demeure inchangé, par rapport à l'attente normal de la réponse à la requête, il ne s'aperçoit de rien. Et n'oublions pas que le deuxième essai est tenté uniquement en cas d'échec, donc pas systèmatiquement. Voici un exemple de code pour effectuer ceci:
Remarque: on peut modifier facilement la fonction, afin de lui faire effectuer autant de tentatives qu'on le souhaite( 2 essais étaient assez dans mon cas).
/*********************************************************/
/*
Méthode daFill( DataAdapter.fill )
*/
/*********************************************************/
// Sans mettre un temps d'attente anormal pour faire le fill.
//Cette méthode sert à faire UNIQUEMENT le data_ad.fill
//Retourne -1 si problème base de données, ou 0 si pas de problème
//Cette valeur sert à pouvoir savoir si le programme appelant doit faire return
public static int
daFill(System.Data.Odbc.
OdbcConnection
Conn, System.Data.Odbc.
OdbcDataAdapter
data_ad, System.Data.
DataSet
data_set,
string
table,
string
texte_aff_open,
string
texte_aff_fill, System.Web.UI.
Page
mapage)
{
int
essais = 0;
Boolean
reussi;
do
{
reussi =
true
;
//on suppose que ca sera bon cette fois-ci
essais += 1;
try
{
data_ad.Fill(data_set, table);
// 2eme paramètre pas obligé
}
catch
(System.Data.Odbc.
OdbcException
err) {
//je vérifie pas que c'est bien lost connection
//car c'est ça tout le temps, et même si pas ça,
//on fait que réessayer une 2ème fois
reussi =
false
;
//dès qu'on rentre ici, c'est faux!
if
(essais > 1)
//2 échecs : c'est fini
{
//je change qd même VarGlob.deuxfois
//(VarGlob.deux fois est une variable globale( static) d'un module de
//classe )
VarGlob
.deux_fois =
"Pour webmestre: 2 échecs fill"
;
mapage.Response.Write(texte_aff_fill);
mapage.Response.Write(
"2essais fill effectués. 2 échecs."
);
mapage.Response.Write(
"Message: "
+ err.Message);
Conn.Close();
return
-1; pb bdd
}
else
//on n'a essayé qu'une fois( un échec)
{
VarGlob
.deux_fois =
"Fill effectué la 2ème fois"
;
Conn.Close();
//je fais qd même Conn.close, malgré lost connection
//( perdue)
//Je rouvre la connexion
try
{
Conn.Open();
}
catch
( System.Data.Odbc.
OdbcException
err2) {
mapage.Response.Write(texte_aff_open);
mapage.Response.Write(
"open pour 2ème essai fill"
);
mapage.Response.Write(
"Message: "
+ err2.Message);
return
-1; pb bdd
}
//fin try du open no2
//on a pu rouvrir
}
//fin if essais>1
}
//fin catch du fill no1
}
while
((essais < 2) && (reussi = =
false
));
//essais=1 ou essais=2
if
(essais == 1) {
VarGlob
.deux_fois =
"Fill effectué en une fois"
;
}
//fin du data_ad.fill
return
0;
//pas de pb bdd
}
// fin daFill