当用“AS”查询创建DataTable列时,无法引用它

时间:2012-08-01 15:24:46

标签: c# sql datatable

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

示例:

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

我用

SqlDataAdapter.Fill(dtblUserInfo) 

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

我尝试用

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

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

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

对此有何想法?

谢谢,     史蒂夫。

4 个答案:

答案 0 :(得分:2)

只需替换此

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

由此

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

当您使用AS时,您不需要单引号,而是需要新的列名。列名永远不会在引号内。

如果要将名称替换为用户全名等2个单词,则需要使用[],例如[UserFullName]。

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

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

然后验证您的查询...

答案 3 :(得分:0)

PhaDaPhunk说:

  

只需替换此

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

由此

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

当您使用AS时,您不需要它所期望的单引号   新列名称。列名永远不会在引号内。

这是一个很好的答案,我还有一些额外的小费。 如果要用“用户全名”之类的2个单词替换名称,则需要使用[],例如[用户全名]。