asp.net Ado存储过程字段

时间:2011-06-13 12:47:44

标签: c# sql-server ado.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 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"]);

提前致谢。

问候。

5 个答案:

答案 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临时表并将它们命名为您想要的,然后从临时表中提取代码,而不需要代码端需要任何别名。但是,没有必须对存储过程进行别名。祝你好运!