编辑:1)名称!=名称,这不是问题。该代码在 99.9999% 的时间内都可以工作,并且偶尔会在生产中失败(从不在实验室条件下>_<)我们正在部署调试代码,它应该可以解释正在发生的事情,但是在我们能够做到之前,只是寻找是否有人看过任何类似的东西。
编辑:2)仅供参考。为了测试,我运行了以下代码
...
var name = row["Name"].ToString().ToLower();
var name2 = row["name"].ToString().ToLower();
...
这实际上工作得很好,这表明至少在框架 4 中, row[xx] 不区分大小写。无论哪种方式,这都不是我不幸看到的问题。希望是:)
这是一个简单的代码片段,它给我们带来了问题。不仅仅是这段代码,实际上是任何看起来像这样的代码。共同的部分是 row["name"] 抛出一个异常,声称 "name" 不是表 Table 的列。
var command = new SqlCommand("SELECT Name FROM Table1");
DataSet result = helper.ExecuteQuery(command);
if (result == null || result.Tables.Count != 1)
{
return;
}
foreach (DataRow row in result.Tables[0].Rows)
{
var name = row["Name"].ToString().ToLower();
}
helper.ExecuteQuery 返回一个数据集,
如您所见,我们知道结果是一个数据集,即它不为空并且包含一个表。
我们知道它有行,因为我们在 foreach 循环中。我们知道 Name 作为列存在,因为运行的 sql 语句总是被硬编码到那里,没有歧义或聪明。
有什么想法(与问题有关吗?)有一些解决方法,使用 int 索引器,这些查询中的大多数只返回一或两列。首先检查列,诸如此类的事情,但是我记得这么多年了,我从来没有遇到过这个问题。