【发布时间】:2012-10-02 11:16:51
【问题描述】:
编辑:1)名称!=名称,这不是问题。该代码在 99.9999% 的时间内都可以工作,并且偶尔会在生产中失败(从不在实验室条件下>_
编辑:2)仅供参考。为了测试,我运行了以下代码
...
var name = row["Name"].ToString().ToLower();
var name2 = row["name"].ToString().ToLower();
...
这实际上工作得很好,这表明至少在框架 4 中, row[xx] 不区分大小写。无论哪种方式,这都不是我不幸看到的问题。希望是:)
这是一个简单的 sn-p 代码,它给我们带来了问题。不仅仅是这段代码,实际上是任何看起来像这样的代码。常见的部分是 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 返回一个DataSet,
如您所见,我们知道结果是一个数据集,即它不为空并且包含一个表。
我们知道它有行,因为我们处于 foreach 循环中。我们知道 Name 作为列存在,因为运行的 sql 语句总是被硬编码到其中,没有歧义或聪明。
任何想法(与问题有关?)有一些变通方法,使用 int 索引器,大多数这些查询只返回一或两列。首先检查列,诸如此类的事情,但是我记得这么多年了,我从来没有遇到过这个问题。
【问题讨论】:
-
您是否在调试器中对行的列集合达到了峰值?这应该是你做的第一件事。当您说“总是非常硬编码”时,听起来您并不是 100% 确定的。查看调试器中的集合并找出确切的名称。
-
需要看看 helper.ExecuteQuery 在做什么...
-
只是一个观察,在您的 sql 查询中,您将列名指定为
name(所有小写字母),但是当从 Dataset 访问列时,您给出了Name(标题大小写).isn索引名称不区分大小写吗? -
Dangit @th1rdey3 :D 你应该让他注意到……喂人一条鱼,教人钓鱼……等等。
-
是的,这可能不是一个很好的例子,它是所有不同情况的模拟组合。无法在调试器中查看,除了部署时从未发生过,然后很少发生。
标签: c# sql-server tsql ado.net dataset