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

问题描述:

我有一台“Cron服务”,我在生产服务器上运行了一年半以上。尝试连接时MySQL.Data:“对象引用未设置为对象的实例”

这是一个常规的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)与“使用”声明中这样的功能,所以连接正在关闭,这个不应该是一个连接被打开并耗尽的问题(尽管它可能,如果MySQL库内有bug的话)。

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

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 

虽然该错误信息是很清楚,就像我之前提到的,我们发布的所有连接,所以这不应该发生。有任何想法吗?

+0

你检查了事件查看器吗? – CheeseConQueso 2009-11-24 21:47:54

+0

是的。除了我自己的应用程序发布的错误报告(详细信息是我上面发布的内容)和“应用程序”日志中的条目之外,没有任何内容表明我的进程抛出未处理的异常并死亡。 – 2009-11-24 21:56:00

+0

它是100%的时间还是偶尔会死? – 2009-11-25 05:02:42

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

在此对所测试的什么版本?

我目前在5.2.2.0中看到这个问题(并且它不会在5.0.1.0中发生)。

我会建议降级5.0.1.0或升级到最新,看看它是否仍然存在。