MySQL.Data:“尝试连接时,对象引用未设置为对象的实例”

时间:2009-11-24 21:43:05

标签: mysql windows-services .net-2.0

我有一个“Cron服务”,我已经在我们的生产服务器上运行了一年半。

这是一个常规的Windows服务,每分钟都连接到数据库,检查一个表是否有事情要做,如果是,那么它。这是一个不经常使用的网站的服务器,所以大部分时间服务完全闲置。

几个月前,这项服务开始抛出以下异常而死亡:

MESSAGE: Object reference not set to an instance of an object.
SOURCE: MySql.Data
TARGETSITE: MySql.Data.MySqlClient.Driver CheckoutConnection()
STACKTRACE:    at MySql.Data.MySqlClient.MySqlPool.CheckoutConnection()
   at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
   at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
   at MySql.Data.MySqlClient.MySqlPool.GetConnection()
   at MySql.Data.MySqlClient.MySqlConnection.Open()
   at DBA.Connect() in D:\xxx\DBA.vb:line 21
   at CronService.TaskMailings.OnExecute() in D:\xxx\TaskMailings.vb:line 54
   at CronService.CronTask.ThreadExecute() in D:\xxx\CronTask.vb:line 99
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

该例外显然来自MySQL库内部。另外,我调用它的函数非常简单:

    Public Shared Function Connect() As MySqlConnection
        Dim strConnString As String = WebConfigurationManager.AppSettings("ConnectionString")
        Dim DBConn As New MySqlConnection(strConnString)
        DBConn.Open()
        Return DBConn
    End Function

我正在调用DBA.Connect()(CronService.TaskMailings.OnExecute)的函数正在使用“Using”语句,所以连接 关闭,这个不应该成为连接被打开并且用尽的问题(尽管可能,如果MySQL库中存在错误)。

这是我用于服务的连接字符串:

 server=localhost;port=13306;uid=xxx;pwd=xxx;database=xxx;Pooling=True;charset=utf8;

任何想法可能会在这里发生什么? 最奇怪的是,在它开始发生之前,它已经工作了一年多,并且对服务器的负载没有足够的变化来证明它是一个负载问题,我相信。


编辑:有些时候它会死掉,它会给出其他错误信息:

MESSAGE: error connecting: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.
SOURCE: MySql.Data
TARGETSITE: MySql.Data.MySqlClient.Driver GetConnection()
STACKTRACE:    at MySql.Data.MySqlClient.MySqlPool.GetConnection()
   at MySql.Data.MySqlClient.MySqlConnection.Open()
   atDBA.Connect() in D:\xxx\DBA.vb:line 21

虽然错误信息很清楚,就像我之前提到的那样,我们正在释放所有连接,所以这不应该发生。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我意识到这是一个老问题,但问题在于mysql.data.dll

这是针对哪个版本进行测试的?

我目前在5.2.2.0中看到了这个问题(在5.0.1.0中没有发生这种情况)。

我建议将评分降级到5.0.1.0或升级到最新版本并查看是否仍然发生。