【发布时间】:2016-11-30 08:56:14
【问题描述】:
我更新了代码以简化它
我在这段代码上遇到了一个以前从未发生过的奇怪问题(完美运行了 2 年)。
我在多个 IIS 上运行 MVC 应用程序,并在 C# 代码上使用 MySQL。
查询表 X 收到来自同一架构中不同表的响应。
此问题偶尔在某些 IIS 上发生(每 1-4 天一次)并通过 3 iisreset 解决。
这是我正在使用的代码(更新):
using (var conn = new MySqlConnection(connectionString))
{
var command = conn.CreateCommand();
command.CommandText = sql;
IDataReader reader;
try
{
reader = command.ExecuteReader();
}
catch (Exception ex)
{
throw new MoranbernateQueryException(sql, ex);
}
using (reader)
{
while (reader.Read())
{
Console.WriteLine(sql, GetTableFromReader(reader));
}
}
}
}
private static string GetTableFromReader(IDataReader reader)
{
var schema = reader.GetSchemaTable();
var rows = schema?.Rows;
if (rows != null && schema.Columns.Count > 11)
{
return rows[0][10].ToString();
}
}
此代码的结果是对表 A 的 sql 查询,但来自读取器架构的表(和数据)是 B。两个表都驻留在同一个数据库和架构中。
还有其他人遇到过此类问题吗?我想听听有关调查的任何理论或建议。
【问题讨论】:
-
command 是 MySqlConnection 的一个实例,你是如何编译这段代码的?
-
@GSerg - 阅读器将在 using 块完成后被释放。但值得看看 this 存在于其中的方法声明以及它是如何被调用的。
-
我和@Tom 一起工作,我想更新这件事,我们发现由于某些功能(已删除),我们有一个很长的进程正在运行,但是 iis 已经抛出了
ThreadAbortedException因此没有尝试捕获在从MySql读取数据时,我们的连接池没有同步,导致连接泄漏。现在我们正在尝试了解这是否是 MySql 驱动程序问题或其他问题。有什么想法吗?
标签: c# mysql asp.net ado.net datareader