【问题标题】:How to return table name from stored procedure in dataset如何从数据集中的存储过程返回表名
【发布时间】:2011-02-17 14:39:43
【问题描述】:

我使用数据集来存储加载时需要的 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);

【问题讨论】:

  • 您不能这样做 - SqlDataAdapter不会查看数据库中的物理表名来确定 ADO.NET 数据集中的表名。抱歉,真的无法自动执行此操作。

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


【解决方案1】:

也许这可以通过在返回表中添加一个额外的列来解决

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】:

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      让第一个(或最后一个)表具有meta 表名表,其顺序与以下(或前面)表相同。

      【讨论】:

      • 谢谢,这可能是我现在想要的问题的解决方案。但这不是一个实际的答案。我可以在 adp.fill 函数的重载中看到,它有一个重载之一,该重载具有可以映射表名的数据表数组,但它也在寻找其他两个我不想给出的参数。即 startRow,要检索的最大记录数
      • @Shantanu:Lloyd 的意思是,从你的 SP 中返回元数据(例如:SELECT 'L_GUEST_TYPE', 'L_AGE_GROUP'...)并将.TableName 属性填写为ds.Table[0].TableName = ds.Table[nLastTable].Rows[0][0].ToString()
      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-10
        • 2020-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        相关资源
        最近更新 更多