我更新了代码以简化代码
我遇到了一个在此代码之前从未发生过的奇怪问题(完美运行2年)。
我在多个IIS上运行MVC应用程序,并使用MySQL而不是C#代码。
查询表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查询,但来自reader模式的表(和数据)是B.两个表都驻留在相同的DB和Schema中。
还有其他人遇到过这类问题吗?我想听听任何有关调查的理论或建议。
答案 0 :(得分:1)
我不知道你如何访问读者甚至超出范围,你的代码流可能会出现问题。使用下面的代码,我认为这必须工作。
using(var command = new MySqlConnection(connectionString))
{
command.CommandText = sql;
try
{
using(SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
var t = new T();
var i = 0;
foreach (var property in properties)
{
try
{
property.SetValue(t, reader.GetValue(i++));
}
catch (Exception ex)
{
HandleSetValueException<T>(sql, parameters, reader, connection, ex);
}
}
yield return t;
}
}
}
catch (Exception ex)
{
throw new MoranbernateQueryException(sql, ex);
}
}
答案 1 :(得分:0)