如何从数据集中的存储过程返回表名

时间:2010-05-10 10:09:15

标签: c# sql stored-procedures ado.net dataset

我使用数据集来存储加载时需要的15个表。当我使用存储过程填充所有表时,它返回所有表,但表的名称不是数据库中实际表名的名称。

它将所有带表名的表作为Table1,Table2,Table3 ......

我希望他们与名字一致,因为他们实际上在桌子上。

SELECT PK_GUEST_TYPE, [DESCRIPTION] FROM L_GUEST_TYPE
SELECT PK_AGE_GROUP_ID, AGE_GROUP FROM L_AGE_GROUP
SELECT PK_COMPANY_ID, COMPANY_NAME FROM M_COMPANY
SELECT PK_COUNTRY_ID, COUNTRY FROM L_COUNTRY
SELECT PK_EYE_COLOR_ID, [DESCRIPTION] FROM L_EYE_COLOR
SELECT PK_GENDER_ID, [DESCRIPTION] FROM L_GENDER
SELECT PK_HAIR_COLOR_ID, [DESCRIPTION] FROM L_HAIR_COLOR
SELECT PK_STATE_PROVONCE_ID, [DESCRIPTION] FROM L_STATE_PROVINCE
SELECT PK_STATUS_ID, [DESCRIPTION] FROM L_STATUS

SELECT PK_TITLE_ID, [DESCRIPTION] FROM L_TITLE
SELECT PK_TOWER_ID, [DESCRIPTION] FROM M_TOWER
SELECT PK_CITY_ID, [DESCRIPTION] FROM L_CITY
SELECT PK_REGISTER_TYPE_ID, [DESCRIPTION] FROM L_REGISTER_TYPE

这是我的前端编码来填充数据集。

             OpenConnection();
             adp.Fill(ds);
             CloseConnection(true);

5 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

可能是通过在返回表格中添加额外的列来解决这个问题

Create procedure psfoo ()
AS
select * ,'tbA' as TableName from tbA
select * ,'tbB' as TableName from tbB

然后在C#代码中

 foreach (DataTable dt in ds.Tables)
    {
        if (dt.Rows[0]["TableName"].ToString().Contains("tbA"))
        {

        }
        else if (dt.Rows[0]["TableName"].ToString().Contains("tbB"))
        {

        }
    }

答案 2 :(得分:1)

我会投入时间来使用typed dataset,让很多事情变得更容易。 请记住,您可能会在一到三个月内回到此代码。 :)

答案 3 :(得分:0)

让第一个(或最后一个)表成为meta表名的表,其顺序与下面(或前面)表的顺序相同。

答案 4 :(得分:0)

MS表映射是一个完全的笑话。 有什么区别

ds.Table(0)
ds.Table("Table")
ds.Table("Customer")

当我们无法保证在我们的应用程序中返回的表的顺序时。 需要是STRONG-NAME匹配...... See my solution