1

我有一个返回 14 个表的存储过程。现在,在我的应用程序中,数据集包含所有 DataTable 名称为 table、table1、table2、table3 ... 的数据表。我在这里想要的是,我的数据集应该包含与数据库表名称相同的所有数据表。可能吗 ?

提前感谢。

4

3 回答 3

0

您可以使用TableMappingsfor yourDataAdapter来获取正确的表名:

using (var con = new SqlConnection(connectionString))
{
   string sql = @"SELECT * FROM locGSP; 
                  SELECT * FROM locCountry; 
                  SELECT * FROM locMarketUnit";
   using(var da = new SqlDataAdapter(sql, con))
   {
       // demonstrate the issue here:
       DataSet dsWrong = new DataSet();
       da.Fill(dsWrong); // now all tables are in this format: Table,Table1,Table2

       // following will map the correct names to the tables
       DataSet dsCorrect = new DataSet();
       da.TableMappings.Add("Table", "locGSP");
       da.TableMappings.Add("Table1", "locCountry");
       da.TableMappings.Add("Table2", "locMarketUnit");
       da.Fill(dsCorrect); // now we have the correct table-names: locGSP,locCountry,locMarketUnit
   }
}

这是使用DataReaderandDataSet.Load填充的另一种方式DataSet

using (var con = new SqlConnection(connectionString))
{
   string sql = @"SELECT * FROM locGSP; 
                  SELECT * FROM locCountry; 
                  SELECT * FROM locMarketUnit";
   using (var cmd = new SqlCommand(sql, con))
   {
       con.Open();
       using (var rdr = cmd.ExecuteReader())
       {
           // after the next line the DataSet will have the correct table-names
           ds.Load(rdr, LoadOption.OverwriteChanges, "locGSP", "locCountry", "locMarketUnit");
       }
   }
}

背景:

从 DataAdapter 填充 DataSet

多个结果集:如果 DataAdapter 遇到多个结果集,它会在 DataSet 中创建多个表。这些表被赋予一个递增的默认名称TableN,从 Table0 的“Table”开始。如果将表名作为参数传递给 Fill 方法,则会为表指定一个递增的默认名称 TableNameN,从 TableName0 的“TableName”开始。

于 2013-01-16T12:54:03.130 回答
0

在这里,您有一个要点可以帮助您进行此映射。

用法:

SomeDataSet dt = DataUtil.Fill<SomeDataSet>(
    procedureName: "someSP", 
    connectionString: "yourConnectionString", 
    values: new {
        someValue = 15,
        otherValue = "test",
    },
    mappings: new { 
        Table1: "YourDataSetTable1",
        Table2: "YourDataSetTable2",
    }
);

(最后的代码仅适用于框架 4.0)

于 2013-01-16T13:04:46.227 回答
-1

您的过程返回 14 个结果集,而不是表。除非您特别命名它们,否则它们是未命名的结果集。例如,以下查询的表名是什么?

select c.Name,sum(o.orders) as NumOrder,sum(o.price) as TotalPrice
from 
customer c 
join orders o on o.cust_id=c.cust_id
group by c.name

有效的 SQL 查询,但 SQL 不知道如何称呼这个“虚拟表”或结果集。

于 2013-01-16T12:29:27.453 回答