我在存储过程中有以下选择:
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 as CategoryName”,“C.ID as 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"]);
提前致谢。
问候。
何
答案 0 :(得分:0)
解决方案是重构数据库以使用正确的列名。如果不重构数据库,则必须重构存储过程以正确识别列。
无论哪种方式,你都可以打字。答案 1 :(得分: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
答案 2 :(得分: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"]);
...
答案 3 :(得分: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
答案 4 :(得分:0)
正如其他一些人所说的那样,您需要在存储过程中对名称进行别名,并且他们已经为您提供了如何执行此操作的示例。或者,您可以SELECT INTO临时表并将它们命名为您想要的,然后从临时表中提取代码,而不需要代码端需要任何别名。但是,没有必须对存储过程进行别名。祝你好运!