C'est pas .Net qui recycle la connexion résultat, la connexion qu'il a crée pour sa requête est réutilisée mais les 60sec sont passé et elle est coupée?
http://msdn.microsoft.com/fr-fr/libr...=vs.80%29.aspx
C'est pas .Net qui recycle la connexion résultat, la connexion qu'il a crée pour sa requête est réutilisée mais les 60sec sont passé et elle est coupée?
http://msdn.microsoft.com/fr-fr/libr...=vs.80%29.aspx
Voici le code qui provoque l'erreur. Rien de bien compliqué :
La question que je me pose est quelle est la bonne façon de connecter une application ASP .NET à un serveur MySQL chez OVH ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 List<Appartement> appList = new List<Appartement>(); Appartement newAppartement = null; try { SqlConnection conn = new SqlConnection(); conn.ConnectionString = m_connectionString; SqlCommand cmd = new SqlCommand(); conn.Open(); cmd.Connection = conn; if (conn.State == ConnectionState.Open) { cmd.CommandText = "FindAllAppartement"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@errCode", SqlDbType.Int); cmd.Parameters["@errCode"].Direction = ParameterDirection.Output; SqlDataReader myReader = cmd.ExecuteReader(); while (myReader.Read()) { newAppartement = new Appartement(myReader.GetInt32(0)); newAppartement.Cage = myReader.GetInt32(1); newAppartement.Etage = myReader.GetInt32(2); newAppartement.Aile = myReader.GetString(3); newAppartement.TypeAppartement = myReader.GetString(4); [...] appList.Add(newAppartement); } myReader.Close(); conn.Close(); } else { throw new Exception("Ouverture de la connexion impossible"); } } catch (Exception ex) { throw new Exception("Impossible de charger les données depuis la base de donnée. Cause :", ex); }
les seules infos sont ici : http://guides.ovh.net/bddmutuwindows
Le support OVH vient de me dire ne pas utiliser le connecteur MySQL .NET et de faire :
Problème. Si je fais ça j'obtiens :ce sont des connecteurs ODBC installés coté serveur, vous n'avez aucune dll a appeler.
Donc vous avez uniquement à ajouter la ligne suivante dans votre fichier web.config:
<connectionStrings>
<add name="BMREConnString" connectionString="Server=;Database=;Uid=;Pwd=;pooling=false;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
J'ai effectué des tests en ajoutant dans la connectionString les infos de connexion appropriées.---> System.Data.SqlClient.SqlException: Une erreur liée au réseau ou spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. (provider: Named Pipes Provider, error: 40 - Impossible d'ouvrir une connexion à SQL Server) ---> System.ComponentModel.Win32Exception: Le chemin réseau n’a pas été trouvé --- Fin de la trace de la pile d'exception interne
J'ai bien sûr supprimé de mon code tout ce qui concerne le connecteur et l'utilisation du connecteur MySQL .NET. Je n'utilise que le framework .NEt 4.0.
Mais j'ai l'impression que les instructions données sont pour du SQL Server, pas du MySQL...
Par contre, j'avais bien eu la confirmation d'OVH que la connexion était coupée automatiquement au bout de 60 sec d'inactivité mais je ne suis pas dans ce cas puisque je lance la requête plusieurs fois / minute.
Et pourtant je suis un peu contrarié que tu ne tiennes pas compte de nos conseils. On passe du temps a essayer de résoudre ton pb c'est un peu la moindre des choses:
- Merci de coder selon les bonnes pratiques en utilisant des using. Tu es dispensé d'appeler la méthode Close();
- Déclare la variable newAppartement dans la boucle while.
Merci de nous poster le code corrigé.Question bête, mais je la pose quand même: tu as bien valorisé la chaîne de connexion?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 using (SqlConnection conn = new SqlConnection()) { using (SqlCommand cmd = new SqlCommand()) { using (SqlDataReader myReader = cmd.ExecuteReader()) { while (myReader.Read()) { var newAppartement = new Appartement(myReader.GetInt32(0)); appList.Add(newAppartement); } } } }
"Winter is coming" (ma nouvelle page d'accueil)
Désolé Immobilis. N'y vois pas une mauvaise volonté de ma part, c'est juste que je souhaitais ne pas faire de modification pour le support OVH.
J'ai confirme que j'ai mis à jour le site avec les corrections et voici le code :
La connectionString est la suivante (web.config) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 List<Appartement> appList = new List<Appartement>(); Appartement newAppartement = null; try { using (SqlConnection conn = new SqlConnection()) { conn.ConnectionString = ConfigurationManager.ConnectionStrings["BMREConnString"].ConnectionString; conn.Open(); using (SqlCommand cmd = new SqlCommand()) { cmd.Connection = conn; cmd.CommandText = "FindAllAppartement"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@errCode", SqlDbType.Int); cmd.Parameters["@errCode"].Direction = ParameterDirection.Output; using (SqlDataReader myReader = cmd.ExecuteReader()) { while (myReader.Read()) { newAppartement = new Appartement(myReader.GetInt32(0)); appList.Add(newAppartement); } } } } } catch (Exception ex) { throw new Exception("Impossible de charger les données depuis la base de donnée. Cause :", ex); } return appList;
Je précise que les valeurs de la connectionString m'ont été fournies par OVH lors de la création de la base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <connectionStrings> <add name="BMREConnString" connectionString="Server=mysqlxxx.perso;Database=xxx;Uid=xxx;Pwd=xxx;pooling=false;" providerName="MySql.Data.MySqlClient" /> </connectionStrings>
Résultat :
System.Data.SqlClient.SqlException: Une erreur liée au réseau ou spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. (provider: Named Pipes Provider, error: 40 - Impossible d'ouvrir une connexion à SQL Server) ---> System.ComponentModel.Win32Exception: Le chemin réseau n’a pas été trouvé --- Fin de la trace de la pile d'exception interne --- à System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) à [...]
Tu utilises une SqlConnection qui est faite pour SQLserver et non pour MySQL c'est pour ça que ça ne marche pas.
Sinon tu as le forum OVH qui est pas mal : http://forum.ovh.com/forumdisplay.php?f=49
C'est bien ça qui me trouble. SQL Server vs MySQL ...
Mais comment accéder à une base MySQL sans utiliser les DLL du connecteur MySQL .NET ?
Voici les instructions OVH :
Pourtant, j'ai bien précisé plusieurs fois au support OVH que j'avais une BDD MySQL.Bonjour,
ce sont des connecteurs ODBC installés coté serveur, vous n'avez aucune dll a appeler. Donc vous avez uniquement à ajouter la ligne suivante dans votre fichier web.config:
<connectionStrings>
<add name="BMREConnString" connectionString="Server=;Database=;Uid=;Pwd=;pooling=false;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
Et ensuite, pour récupérer les informations il vous suffit d'utiliser:
myConnection = ConfigurationManager.ConnectionStrings["BMREConnString"].ConnectionString
Cordialement
Je n'ai malheureusement pas accès au forum OVH. Les inscriptions sont fermées. J'ai fait une demande d'accès au support OVH mais elle toujours sans réponse.
C'est autre chose le provider ODBC:
http://msdn.microsoft.com/fr-fr/libr...onnection.aspx
Pour moi, il y a un gros mélange des technologies dans les directives données par le support OVH (et peut être moi aussi).
En me référant à leur guide http://guides.ovh.net/bddmutuwindows
et si je reprends leur exemple :
Sachant que j'ai une application ASP .NET basée sur la version 4.0 du framework et une base de donnée MySQL, ma connectionString devrait être :Serveur : srv-sql001
Utilisateur : login
Nom de la base : domaine
Mot de passe : password
Par contre, dans mon code, quel "librairie" utiliser ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 connectionString="Server=srv-sql001;Database=domaine;Uid=login;Pwd=password;pooling=false;" ou connectionString="Driver={MySQL ODBC 5.1 Driver};Server=srv-sql001;Database=domaine;Uid=login;Pwd=password;Pooling=false;Option=3;" />
- System.Data.Odbc ?
- System.Data.SqlClient ?
- Autre ?
Pour le moment, rien ne fonctionne, y compris avec le code :
Résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 using (OdbcConnection conn = new OdbcConnection()) { conn.ConnectionString = ConfigurationManager.ConnectionStrings["BMREConnString"].ConnectionString; conn.Open(); using (OdbcCommand cmd = new OdbcCommand()) { cmd.Connection = conn; cmd.CommandText = "FindAllAppartement"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@errCode", 0); cmd.Parameters["@errCode"].Direction = ParameterDirection.Output; using (OdbcDataReader myReader = cmd.ExecuteReader()) { while (myReader.Read()) { newAppartement = new Appartement(myReader.GetInt32(0)); appList.Add(newAppartement); } } } }
System.Data.Odbc.OdbcException: ERROR [IM002] [Microsoft][Gestionnaire de pilotes ODBC] Source de données introuvable et nom de pilote non spécifié à System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) à System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle)
Tu pourrais peut être utiliser la fabrique et les interfaces comme indiqué dans la FAQ et ainsi laisser le Framework gérer. Avec le nom du provider il utilisera les objets appropriés.
"Winter is coming" (ma nouvelle page d'accueil)
En utilisant le système des fabriques j'obtiens :
System.ArgumentException: Chaîne non vide attendue pour le paramètre 'providerInvariantName'. à System.Data.Common.ADP.CheckArgumentLength(String value, String parameterName)et le web.config
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 // Creation de la fabrique DbProviderFactory factory = DbProviderFactories.GetFactory( ConfigurationManager.ConnectionStrings["BMREConnString"].ProviderName); using (IDbConnection conn = factory.CreateConnection()) { conn.ConnectionString = ConfigurationManager.ConnectionStrings["BMREConnString"].ConnectionString; conn.Open(); using (IDbCommand cmd = factory.CreateCommand()) { cmd.Connection = conn; cmd.CommandText = "FindAllAppartement"; cmd.CommandType = CommandType.StoredProcedure; using (IDataReader myReader = cmd.ExecuteReader()) { while (myReader.Read()) { newAppartement = new Appartement(myReader.GetInt32(0)); appList.Add(newAppartement); } } } }
Note : Même résultat si je ne précise pas le providerName.<connectionStrings>
<add name="BMREConnString"
connectionString="Server=mysqlxxx;Database=xxx;Uid=xxx;Pwd=xxx;Pooling=false;"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
Alors là... Des pistes:
En espérant que la version soit la bonne, sinon, il faudra leur demander.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <system.data> <DbProviderFactories> <remove invariant="MySql.Data.MySqlClient" /> <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.2.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </DbProviderFactories> </system.data>
"Winter is coming" (ma nouvelle page d'accueil)
J'attends la réponse du support OVH ...
Je vous communiquerais les résultats dès que possible.
"Winter is coming" (ma nouvelle page d'accueil)
Je suis aussi chez OVH et j'ai le même problème en utilisant mysql.
Avez-vous réussit à trouver d'où vient ce bug ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager