2012-08-01 32 views
2

我已經創建了一個DataTable,我使用其中包含'AS'的SQL查詢來填充數據表。無法引用DataTable列當它由具有「AS」的查詢創建時

實施例:

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

我使用

SqlDataAdapter.Fill(dtblUserInfo) 

以填充表和已驗證了柱UserFullName與數據的字符串中存在。

我嘗試用參考

string strUserFullName = dtblUserInfo.Rows[0]["UserFullName"].ToString(); 

,即使我可以看到,有加入了手表的數據在此細胞的細胞,它返回一個空字符串。

我確定Row [0]是單元格中包含數據的行,通常不會硬編碼該值,但僅用於解釋和調試目的。

對此有何看法?

謝謝, Steve。

+0

如果您看數據表,您是否看到'UserFullName'列? – davenewza 2012-08-01 15:34:20

+2

您是否嘗試刪除'UserFullName'周圍的單引號? – Taryn 2012-08-01 15:35:18

+0

仔細檢查列名後,我發現實際上有另一個名爲UserFullName的列包含在結果集中(來自SELECT tblName。*)。因此,該表追加了一個1到我創建的列(UserFullName1)來補償。基本上,我受到了阻撓,並且感謝所有想要幫助的人。 – Steve 2012-08-01 15:49:30

回答

2

只是當你正在使用AS你不需要單引號它期待一個新的列名由該

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

替換此

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

。列名不會在引號內。

如果您想用2個單詞(如用戶全名)替換名稱,則需要使用[],例如[UserFullName]。

+0

我非常肯定,當新列名稱作爲其中的空格時,您必須有引號。不是說任何人都應該這樣做,但我認爲我只是不必要地採用了這種做法。 – Steve 2012-08-01 15:50:48

+0

雖然我從來沒有嘗試過,但我認爲你是對的。 – phadaphunk 2012-08-01 15:51:38

+1

即使這個問題是我的愚蠢,我標記爲答案,因爲我覺得如果這種情況發生在別人身上,這可能是一個很好的解決方案。 – Steve 2012-08-01 16:27:06

0

由於您在訪問單元時沒有收到異常,所以會告訴您AS列描述不是問題。

此外,因爲代碼在訪問第0行時沒有拋出異常,這會告訴您數據的檢索工作正常。

這意味着問題實際上存在於您的數據中。

要驗證這一點,只需對數據庫直接執行SQL腳本即可。如果結果中有NULL,這可能是問題的一部分(儘管在SQL Server中,這應該導致空列值)。

+0

這也是一個很好的答案。或多或少,因爲它有一系列的步驟來找到這樣的問題的根源。 – Steve 2012-08-01 16:26:12

0

您可以使用此代碼查看您的DataTable的內容: 它會幫助您找到錯誤。

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

然後驗證您的查詢...

0

PhaDaPhunk說:

只是當你使用,你不需要單引號,該公司預計 新本

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

替換此

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

列名稱。列名不會在引號內。

這是很好的答案,並且我還有一些額外的小費。 如果您想用「User Full Name」這樣的2個單詞替換該名稱,則需要使用[],例如[User Full Name]。

相關問題