我创建了一个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]是包含数据的单元格的行,并且通常不会对此值进行硬编码,但仅用于解释和调试目的。
对此有何想法?
谢谢, 史蒂夫。
答案 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)
只需替换此
SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS 'UserFullName' FROM tblUser
由此
SELECT (tblUser.FirstName + ' ' + tblUser.LastName) AS UserFullName FROM tblUser
当您使用AS时,您不需要它所期望的单引号 新列名称。列名永远不会在引号内。
这是一个很好的答案,我还有一些额外的小费。 如果要用“用户全名”之类的2个单词替换名称,则需要使用[],例如[用户全名]。