C# 程序在MySqlConnection.Open()调用上无限期挂起

C# 程序在MySqlConnection.Open()调用上无限期挂起,c#,mysqlconnection,C#,Mysqlconnection,我正在使用MySqlConnection访问远程数据库。它在大多数计算机上运行良好 不过。现在我遇到了一个MySqlConnection.Open()调用永远挂起的情况。我添加了一些write语句以查看它挂起的位置。请参阅下面的代码。语句“_Debug.Write”(“OpenConnection”,“Connection successed”);”从未到达。也没有抛出异常。我试图以管理员身份运行该应用程序,但它仍然挂起在这里。 这一定是环境问题,因为这在所有其他计算机上都可以正常工作。(我正在

我正在使用MySqlConnection访问远程数据库。它在大多数计算机上运行良好

不过。现在我遇到了一个MySqlConnection.Open()调用永远挂起的情况。我添加了一些write语句以查看它挂起的位置。请参阅下面的代码。语句“_Debug.Write”(“OpenConnection”,“Connection successed”);”从未到达。也没有抛出异常。我试图以管理员身份运行该应用程序,但它仍然挂起在这里。 这一定是环境问题,因为这在所有其他计算机上都可以正常工作。(我正在使用.NET Framework 3.5)

有人能解决这个问题吗?我希望如此。 问候 罗布·巴伊 ----------------------------------------------------我的c#源代码 私有MySqlConnection; 私有字符串_server=“server=5.666.82.191;Database=unknown;Uid=me;Pwd=mypasswd”

  • 您不需要执行
    connection.close()这是多余的,因为它是在使用
    块的
    中创建的

  • 为什么要等待连接打开?为什么不在当前线程中派生一个您等待的不同线程呢?如果它没有响应,你可以毫不担心地放弃,稍后再试


  • 如果您正在连接到远程服务器,并且您失去了internet连接,这一点尤其有用
    connection.open()
    不会无限期挂起,但它将挂起其所属线程一段不希望的时间。

    如果引发
    异常
    ,该怎么办。。。不是
    MySqlException
    ?可能是连接字符串错误。它最终会“超时”吗?不会。它无限期地挂着。我不知道为什么。我想默认的超时时间是30秒。你能在
    getData()中显示你在做什么吗
       public void getUserData()
        {
            using (connection = new MySqlConnection(_server))
            {
                if (OpenConnection())
                {
                    getData();
    
                    connection.Close();
                }
            }
        }
    
         private bool OpenConnection()
        {
            bDatabaseConnectionSucceeded = false;
            try
            {
                _Debug.Write("OpenConnection", "Opening connection now!!");
                connection.Open();
                bDatabaseConnectionSucceeded = true;
                _Debug.Write("OpenConnection", "Connection succeeded.");
                return true;
            }
            catch (MySqlException ex)
            {
                _Debug.Write("OpenConnection", "Connection failed." + ex.Message);
                Debug.WriteLine(ex.Message);
                return false;
            }
        }