C# 由带有“AS”的查询创建的DataTable列无法引用

C# 由带有“AS”的查询创建的DataTable列无法引用,c#,sql,datatable,C#,Sql,Datatable,我已经创建了一个数据表,我使用一个包含“AS”的SQL查询来填充它 例如: SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS 'UserFullName' FROM tblUser 我用 SqlDataAdapter.Fill(dtblUserInfo) 以填充表并验证列UserFullName是否存在,其中是否包含一个数据字符串 我试着引用这个单元格 string strUserFullName = dtblUserInfo.

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

例如:

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

SqlDataAdapter.Fill(dtblUserInfo) 
以填充表并验证列UserFullName是否存在,其中是否包含一个数据字符串

我试着引用这个单元格

string strUserFullName = dtblUserInfo.Rows[0]["UserFullName"].ToString(); 
即使通过添加一个watch,我可以看到该单元格中有数据,但它返回一个空字符串

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

有什么想法吗

谢谢, 史蒂夫。

把这个换掉就行了

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

SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS UserFullName 
FROM tblUser
SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS UserFullName FROM tblUser
当您使用AS时,不需要单引号,它需要一个新的列名。列名从不在引号内


如果要将名称替换为2个单词,如User Full name,则需要使用[],例如[UserFullName]。

因为在访问单元格时没有收到异常,这表明AS列描述不是问题所在

此外,由于在访问第0行时代码没有引发异常,这表明您的数据检索工作正常

这意味着问题实际上存在于您的数据中


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

您可以使用这些代码查看数据表的内容: 它将帮助你发现错误

foreach(DataRow dr in dtblUserInfo.Rows)
{
    foreach (var item in dr.ItemArray)
    {
        r += item.ToString();
    }
    r += "\r\n";
}
MessageBox.Show(r);
然后验证您的查询…

Phadapunk说:

把这个换掉

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

SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS UserFullName 
FROM tblUser
SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS UserFullName FROM tblUser
当您使用AS时,您不需要它所期望的单引号 新列名。列名从不在引号内

这是一个很好的答案,我还有一点额外的建议。
如果您想用两个单词(如User Full name)替换名称,则需要使用[],例如[User Full name]。

如果您查看数据表,是否看到“UserFullName”列?是否尝试删除UserFullName周围的单引号?仔细检查列名后,我发现SELECT tblName.*的结果集中包含另一个名为UserFullName的列。因此,该表在我创建的列UserFullName1中添加了一个1以进行补偿。基本上,我是弱智,感谢所有试图帮助我的人。我很确定,当新的列名作为空格出现时,你必须使用引号。并不是说任何人都应该这样做,但我认为我只是不必要地采用了这种做法。尽管问题是我的愚蠢,我还是将此标记为答案,因为我觉得如果这种情况发生在其他人身上,这可能是一个很好的解决方案。这也是一个很好的答案。或多或少,这是因为它有一套很好的步骤来找出此类问题的根本原因。