软件打开连接延迟异常
本文关键字:延迟 异常 连接 软件 | 更新日期: 2023-09-27 18:12:22
我在处理连接到数据库时遇到了一些问题。我所做的基本上是创建一个名为Database
的类,在这个类中,我放置了连接到数据库所需的所有方法,检查连接是否活动,并根据连接的状态更新控件。这工作得很好,控件更新了,没有问题,但是当您的计算机上没有连接时,程序会延迟打开它,因为它们产生了一系列异常,特别是
MySql.Data.MySqlClient。MySqlException (0 x80004005)
异常发生在isAvailable()
方法中,该方法检查连接是否可用,如果存在则分别返回true,如果不存在则返回false。
public static bool isAvailable()
{
try
{
string connStr = @"Server=xxx;Port=xxx;Database=xxx;Uid=xxx;Pwd=xxx;";
connection = new MySqlConnection(connStr);
connection.Open();
return true;
}catch(Exception ex)
{
connection.Close();
Console.WriteLine(ex.ToString());
return false;
}
}
此方法由checkStatus调用,checkStatus包含以下内容:
public static void checkStatus()
{
if(isAvailable() == false)
{
updateStatus("false");
}
else
{
updateStatus("true");
}
}
检查它是真还是假,并分别返回给back,将值传递给另一个方法,该方法只是在界面中显示一个警告Canvas红色或绿色…checkStatus
在我的其他类的每个方面都被调用来检查连接状态(在执行查询之前,几乎结构如下):
string stm = "SELECT * FROM history";
MySqlCommand cmd = new MySqlCommand(stm, Database.Database.Connection);
Database.Database.checkStatus(); //here
MySqlDataReader rdr = cmd.ExecuteReader();
在类构造函数中调用isAvailable Database方法来检查连接是否实际打开。
在这一点上,我不明白为什么在管理程序时出现的异常会延迟用户执行程序时的出现。如果启动时没有出现异常,则程序需要大约5秒才能启动,而有了异常,我到达了1分钟!我做错了什么?
连接到数据库服务器可能需要相当长的时间,原因有很多:网络条件、服务器负载、身份验证开销等。因此,驱动程序(MySqlConnection
后面的代码)需要等待适当的时间来决定是否可以建立连接。显然,在您的情况下,默认超时是60秒(或者是文档中由于多个请求而默认的15秒的倍数?)。
您可以做的是通过连接字符串中的ConnectionTimeout
参数来降低超时-请参阅此处的文档。但是,请记住,如果将其设置为5秒,您的程序可能会在正常情况下失败,否则它将成功连接到服务器。我建议您异步执行数据库操作或至少初始检查,并同时显示'please wait'消息。