0

编辑: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 索引器,这些查询中的大多数只返回一或两列。首先检查列,诸如此类的事情,但是我记得这么多年了,我从来没有遇到过这个问题。

4

2 回答 2

1

你可以试试name in lower

 var name = row["name"].ToString().ToLower(); //name in lower
于 2012-10-11T18:28:56.703 回答
0

当通过列名引用时,大小写确实很重要。

row["Name"]不同于row["name"]

于 2012-10-11T18:39:08.093 回答