连接丢失后自动重新连接到MySql

时间:2009-09-12 15:09:43

标签: c# sql mysql connection-pooling

我有一个使用MySql数据库的ac#应用程序,一段时间不活动(8小时)或连接到数据库是主机的服务器丢失后,与数据库的连接关闭,数据库查询无法解决被执行。如何启用自动重新连接到数据库。

最好的问候。

6 个答案:

答案 0 :(得分:2)

我认为首先应该解决的问题是,为什么连接会连续开放8小时?

我认为在大多数情况下,您将连接到数据库,执行您的操作并关闭它:

using (var conn = new MySqlConnection(connString))
{
  // do what you need here
}

using块将创建一个仅在块内有效的连接。当块结束时,将在连接上调用Dispose方法并关闭并正确处理连接对象。这将阻止您的应用程序在不需要时使用可用连接。

如果您 ,您需要确定连接是否已打开,那么您的连接变量将具有State属性,该属性将是ConnectionState枚举。

您可以使用以下内容进行检查:

if (conn.State != ConnectionState.Open)
{
  conn = new MySqlConnection(connString);
}

希望有所帮助。

答案 1 :(得分:1)

在您的应用程序中,在任何查询之前,请测试您的连接是否仍处于活动状态。如果不是,则重新连接。瞧瞧!

答案 2 :(得分:0)

如果尝试访问数据库失败,请再次运行连接命令。

答案 3 :(得分:0)

您可以在连接字符串中使用选项keepalivekeepalivetimeout。最好使用MySqlConnectionStringBuilder

答案 4 :(得分:0)

感谢您的回答和建议。我有这个要求,因为持久性被委托给非托管代码,而在我的C#代码中,我只调用这个API。

我通过将具有28800秒(8小时)的wait_timeout MySQL参数更改为不活动时段的默认值来解决了我的问题。

答案 5 :(得分:0)

while (conn.State != ConnectionState.Open) { sleep(1); // sleep 1 second, depends what function u use here if using timer namespace mightt need differnt function. this type of code is good for cloud type dbs like godaddy/1&1/amazon cloud. where connection can be asummed unreliable due too heavy cloud lag. conn = new MySqlConnection(connString); }

替代方案可以是:

int counter = 0;
int NUM_RETRIES = 10;

while (conn.State != ConnectionState.Open && counter < NUM_RETRIES)
{
System.Threading.Thread.Sleep(1000);//sleep(1); // sleep 1 second ( if webservice better to sleep for 50-100 ms), depends what function u use here if using timer namespace mightt need differnt function. this type of code is good for cloud type dbs like godaddy/1&1/amazon cloud. where connection can be asummed unreliable due too heavy cloud lag.
  conn = new MySqlConnection(connString);
counter++;
}

也是这个。 https://dev.mysql.com/doc/refman/5.7/en/auto-reconnect.html