2009-11-24 5 views
0

J'accède à une base de données MySql via ODBC. Cela fonctionne normalement bien, mais si la base de données est arrêtée et redémarrée, je dois redémarrer mon application afin de me reconnecter à la base de données.Problème de connexion MySql/Odbc

Le code d'accès à la base de données est comme ceci:

 OdbcConnection connection = new OdbcConnection(connectString); 
     OdbcCommand command = connection.CreateCommand(); 
     command.CommandType = CommandType.Text; 
     command.CommandText = "select * from cds"; 
     OdbcDataAdapter dataAdapter = new OdbcDataAdapter(command); 
     DataSet dataSet = new DataSet(); 
     connection.Open(); 
     dataAdapter.Fill(dataSet); 
     connection.Close(); 

Après un redémarrage de la base de données, je reçois un « serveur MySql a disparu » exception dans la méthode DataAdapter.Fill. Est-ce que est-il possible de me reconnecter à la base de données lorsque je détecte que la connexion est rompue? Je utilise VS2008 et MySQL 5.1.30.

+1

Je dirais que redémarrer MySQL n'est pas vraiment une opération normale, plus vous pouvez gérer l'exception et reconnecter non? – RageZ

+1

que "MySQL Server est parti", me fait chier à n'en plus finir. Je suis passé à PostgreSQL, pas de problème comme ça, content d'avoir changé. De plus, j'ai une requête qui est de 45 secondes auparavant dans MySQL, lorsque porté à Postgresql est devenu 6 secondes. Je souhaite avoir découvert la solution à ce problème MySQL intermittent afin que je puisse fournir une réponse ici. Ce que je peux faire maintenant est juste upvote quiconque a une idée sur la façon d'éviter ce problème dans MySQL – Hao

+0

Lorsque j'essaie de gérer l'exception, je reçois toujours une nouvelle exception sur l'appel à la méthode dataAdapter.Fill(). – Ingvald

Répondre

0

Cette "redémarrer l'application pour se reconnecter à la base de données" est simplement une mauvaise décision de conception. L'initialisation de la connexion à la base de données ne doit pas être placée dans le code de démarrage, placez-la dans une procédure séparée et si l'une de vos méthodes a l'exception "MySql server was away", appelez simplement cette procédure pour la réinitialiser la connexion à la base de données.

+0

Je suis d'accord que le redémarrage de l'application pour se reconnecter est mauvais, c'est pourquoi je cherche un meilleur moyen. J'ouvre et ferme la connexion chaque fois que j'accède à la base de données, mais ce n'est apparemment pas suffisant pour se reconnecter. Est-ce que quelqu'un sait d'un autre moyen de fermer/rouvrir une base de données? – Ingvald