【问题标题】:Can't reference DataTable Column when it is created by a query with "AS"使用“AS”的查询创建时无法引用 DataTable 列
【发布时间】:2012-08-01 15:24:46
【问题描述】:

我创建了一个数据表,我使用其中包含“AS”的 SQL 查询来填充它。

例子:

SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS 'UserFullName' 
FROM tblUser

我用

SqlDataAdapter.Fill(dtblUserInfo) 

填写表格并验证 UserFullName 列是否存在,其中包含一串数据。

我尝试使用

引用此单元格
string strUserFullName = dtblUserInfo.Rows[0]["UserFullName"].ToString(); 

即使我可以通过添加手表看到该单元格中有数据,它也会返回一个空字符串。

我确信 Row[0] 是包含包含数据的单元格的行,通常不会硬编码此值,但仅用于解释和调试目的。

对此有什么想法吗?

谢谢, 史蒂夫。

【问题讨论】:

  • 如果您查看数据表,您是否看到“UserFullName”列?
  • 您是否尝试删除 UserFullName 周围的单引号?
  • 在仔细检查列名后,我发现结果集中实际上包含另一个名为 UserFullName 的列(来自 SELECT tblName.*)。因此,该表将 1 附加到我创建的列 (UserFullName1) 以进行补偿。基本上,我是智障,感谢所有试图提供帮助的人。

标签: c# sql datatable


【解决方案1】:

替换这个

SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS 'UserFullName' 
FROM tblUser

通过这个

SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS UserFullName 
FROM tblUser

当您使用AS 时,您不需要单引号,它需要一个新的列名。列名从不在引号内。

如果你想用用户全名之类的2个字来替换名字,你需要使用[],例如[UserFullName]。

【讨论】:

  • 我很确定当新列名作为空格时你必须有引号。并不是说任何人都应该这样做,但我认为我只是不必要地采用了这种做法。
  • 尽管问题是我的愚蠢行为,但我还是将其标记为答案,因为我觉得如果这种情况发生在其他人身上,这可能是一个很好的尝试解决方案。
【解决方案2】:

由于您在访问单元格时没有收到异常,这告诉您 AS 列描述不是问题。

此外,因为当您访问第 0 行时代码没有抛出异常,这告诉您您的数据检索工作正常。

这意味着问题实际上出在您的数据中。

要验证这一点,只需直接对数据库执行 SQL 脚本。如果您的结果中有 NULL,这可能是问题的一部分(尽管在 SQL Server 中,这应该会导致一个空列值)。

【讨论】:

  • 这也是一个很好的答案。或多或少是因为它有一套很好的步骤可以找到此类问题的根本原因。
【解决方案3】:

您可以使用此代码查看 DataTable 的内容: 它将帮助您找到错误。

foreach(DataRow dr in dtblUserInfo.Rows)
{
    foreach (var item in dr.ItemArray)
    {
        r += item.ToString();
    }
    r += "\r\n";
}
MessageBox.Show(r);

然后验证您的查询...

【讨论】:

    【解决方案4】:

    PhaDaPhunk 说:

    替换这个

    SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS 'UserFullName' FROM tblUser
    

    通过这个

    SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS UserFullName FROM tblUser
    

    当您使用 AS 时,您不需要它所期望的单引号 一个新的列名。列名从不在引号内。

    这是一个很好的答案,我还有一点额外的提示。 如果要将名称替换为“用户全名”等2个单词,则需要使用[],例如[用户全名]。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      相关资源
      最近更新 更多