处理错误超时已过期。在vs 2005中达到了最大池大小连接

时间:2014-01-16 13:29:44

标签: mysql vb.net error-handling

对不起这个主流帖子。在对这个问题进行了长时间的挖掘之后,我还没有真正找到解决方案。很多原因可能引发这个问题。 所以我提出这篇文章要求一些理解。

我在操作数据库..将它们填充到数组,列表,比较,然后再将它们存储在数据库中。在所有这一过程中,我使用了许多查询,例如ExecuteScalarMysqlCommand,导致在new mysqlcommand中创建了大量module.vb

我正在使用vb.net和xampp mysql作为数据服务器.. 我有2个数据库:它们相同但大小不同..

问题:当我正在测试第二个数据库时(记录数量较小) 我的程序运行良好,没有延迟或超时期间错误

,但是当我改变的数据源与我的第一数据库(具有4900点的记录)时,timeout expired弹出直接,导致我的VS 2005变得没有响应

根据我对谷歌的研究,我发现此错误的解释很少

  1. vs 2005仍然有一个错误,那就是timeout expired。解决方案是升级vs版本

  2. 由于尝试在同一服务器上打开相同的连接而引发错误。

  3. 此错误消息并不完全是它所说的。它告诉你连接已满,但实际上连接的插槽仍然可用

  4. 我使用太多mysqlcommand变量i的module.vb多达已经 50 mysqlcomand可变!!!

  5. 我个人意见:我无法应用第一个解决方案..如果我要将其升级到2010年或更高版本,我的程序将会出现很多错误

    对于第二种解决方案:我真的不明白这是什么意思。我想这是因为我试图再次打开相同的连接(例如CMD_open1。的ExecuteReader),但相同的连接已经打开,并且尚未关闭

    在我的节目我已经确保每次我使用CMD.execute读者或的ExecuteNonQuery或执行标量,我添加了CMD name.connection.dispose(),正确关闭再打开一个新的连接

    所以现在我的问题是

    1. 我个人的猜测是否正确?如果没有,请告诉我正确的
    2. 根据我的问题,我个人认为原因是我使用了太多mysqlcommand,即使我每次使用都关闭连接。那是对的吗?对此有什么正确的解释?
    3. 我可以用什么方法来解决我的问题?
    4. 这是读书的好处。我非常渴望得到这个问题的答案。

      这是我的module.vb的ss包含很多mysqlcommand个变量

      enter image description here

1 个答案:

答案 0 :(得分:0)

看起来你需要一些严肃的重构。

与数据库相关的对象 昂贵 。您实例化的越多,您在性能处罚方面的支付就越多。他们也 稀缺 。你最终会用完(早点而不是晚点)。你需要非常明智地使用它们,并确保在完成后适当地清理它们。

许多程序员将所有与数据库相关的对象放入(基本上)一个处理所有清理等的函数中:

Private Function RunQuery( ByVal procName As String ) As DataTable
    Using l_connection = new MySqlConnection("connection info")
        Using l_command = New MySqlCommand( procName )
            l_command.CommandType = StoredProcedure

            ' ... etc ...

            Return l_results
        End Using
    End Using
End Function

Using块确保在每次调用后正确清理数据库对象(调用相应的CloseDispose函数)。

但听起来你已经对可能存在的问题提出了一些很好的建议。你提供的清单几乎就是我推荐的清单。由您来测试和调试以确定哪一个导致问题。

此外,mainstream support for Visual Studio 2005 ended in 2011。如果你不能为升级你的工具来修复已知的错误而烦恼(因为它对你来说太多了),那么除了“碰到你不要抱怨”这个问题还有很多话要说。错误“。