字段名称不在DataSet中

时间:2012-10-11 17:47:23

标签: c# sql-server tsql ado.net dataset

编辑: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返回一个DataSet,

正如您所看到的,我们知道结果是一个数据集,即它不是null并且它包含一个表。

我们知道它有行,因为我们处于foreach循环中。我们知道Name作为一个列存在,因为运行的sql语句总是非常难以编码到那里,没有歧义或聪明。

任何想法(与问题有关?)有一些解决方法,使用int索引器,大多数这些查询只返回一列或两列。首先检查列,所有这些事情,但我多年来从未遇到过这个问题。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用name in lower

 var name = row["name"].ToString().ToLower(); //name in lower

答案 1 :(得分:0)

当按列名引用时,案例确实很重要。

row["Name"]row["name"]

不同