2011-06-13 84 views
2

我有以下的在存儲過程中進行選擇:asp.net阿土存儲過程領域

Select I.ID, 
      I.Name, 
      I.NameUrl, 
      I.Teaser, 
      I.Description, 
      I.Coords, 
      I.Banned, 
      I.DateAdded, 
      I.TypeID, 
      I.MainCategoryID, 
      C.Name, 
      C.NameUrl, 
      C.Description 
from Items I 
inner join Categories C on C.ID=I.MainCategoryID 

一些在幾個表列具有相同的名稱。

下面的asp.net ADO代碼不適用於我使用的這個相同的名稱。

我的問題是:我是否必須在sql查詢中給出一個名稱到字段C.Name,C.NameUrl和C.Description以便從下面所示的數據表中獲取它?我的意思是,我想避免把「C.Name作爲CategoryName」,「C.ID作爲CategoryID」等(在每個存儲過程中)......你知道一個解決方案嗎?

item.Name = Convert.ToString(dt.Rows[0]["Name"]); 
item.NameUrl = Convert.ToString(dt.Rows[0]["NameUrl"]); 
item.Teaser = Convert.ToString(dt.Rows[0]["Teaser"]); 
item.Description = Convert.ToString(dt.Rows[0]["Description"]); 
item.DateAdded = Convert.ToDateTime(dt.Rows[0]["DateAdded"]); 
item.IsBanned = Convert.ToBoolean(dt.Rows[0]["Banned"]); 
item.MainCategory = new Category(); 
item.MainCategory.ID = Convert.ToInt32(dt.Rows[0]["MainCategoryID"]); 
item.MainCategory.Name = Convert.ToString(dt.Rows[0]["C.Name"]); 
item.MainCategory.NameUrl= Convert.ToString(dt.Rows[0]["C.NameUrl"]); 

在此先感謝。

問候。

Jose

回答

0

您可以從結果沒有限定設置使用的列名。

但是,您有不明確的列名稱。所以,你需要他們別名:

Select I.ID, 
      I.Name AS ItemName, 
      I.NameUrl AS ItemNameUrl, 
      I.Teaser, 
      I.Description AS ItemNDescription, 
      I.Coords, 
      I.Banned, 
      I.DateAdded, 
      I.TypeID, 
      I.MainCategoryID, 
      C.Name AS CategoryName, 
      C.NameUrl AS CategoryNameUrl, 
      C.Description AS CategoryDescription 
from Items I 
inner join Categories C on C.ID=I.MainCategoryID 

item.Name = Convert.ToString(dt.Rows[0]["ItemName"]); 
item.NameUrl = Convert.ToString(dt.Rows[0]["ItemNameUrl"]); 
item.Teaser = Convert.ToString(dt.Rows[0]["Teaser"]); 
item.Description = Convert.ToString(dt.Rows[0]["ItemDescription"]); 
item.DateAdded = Convert.ToDateTime(dt.Rows[0]["DateAdded"]); 
item.IsBanned = Convert.ToBoolean(dt.Rows[0]["Banned"]); 
item.MainCategory = new Category(); 
item.MainCategory.ID = Convert.ToInt32(dt.Rows[0]["MainCategoryID"]); 
item.MainCategory.Name = Convert.ToString(dt.Rows[0]["C.CategoryName"]); 
item.MainCategory.NameUrl= Convert.ToString(dt.Rows[0]["C.CategoryNameUrl"]); 
item.MainCategory.Description= Convert.ToString(dt.Rows[0]["C.CategoryDescription"]); 
... 
0

解決方法是重構您的數據庫以使用正確的列名稱。在不重構數據庫的情況下,您將不得不重構存儲過程以正確識別列。

無論哪種方式,你都在進行相當多的打字。

0

這將是更好,如果你做走樣,否則將永遠給問題

Select I.ID, 
     I.Name as IName, 
     I.NameUrl, 
     I.Teaser, 
     I.Description as Idescription, 
     I.Coords, 
     I.Banned, 
     I.DateAdded, 
     I.TypeID, 
     I.MainCategoryID, 
     C.Name as CName, 
     C.NameUrl, 
     C.Description as Cdescription from Items I 
inner join Categories C on C.ID=I.MainCategoryID 
0

可能使用的別名相同的命名列像

Select I.ID, 
I.Name as itemname, 
I.NameUrl as itemurl, 
I.Teaser, 
I.Description as itemdesc, 
I.Coords, 
I.Banned, 
I.DateAdded, 
I.TypeID, 
I.MainCategoryID, 
C.Name as catname, 
C.NameUrl as caturl, 
C.Description as catdesc 
from Items I inner join Categories C on C.ID=I.MainCategoryI 
0

由於一些其他人所說,你需要在您的存儲過程中混淆名稱,他們給出了有關如何這樣做的示例。或者,您可以選擇一個臨時表並將它們命名爲您想要的名稱,然後從臨時表中取出您的代碼,而不會在代碼端需要任何別名。但是,沒有必要爲存儲過程別名。祝你好運!