dbo设置.表名作为DataTable name

本文关键字:DataTable name 设置 dbo | 更新日期: 2023-09-27 17:53:30

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

谢谢。

dbo设置.表名作为DataTable name

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

用法:

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

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

您可以将TableMappings用于DataAdapter以获得正确的表名:

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
   }
}

这里有一个不同的方法使用DataReaderDataSet.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");
       }
   }
}
背景:

从数据适配器填充数据集

Multiple Result Sets:如果DataAdapter遇到多个结果设置时,它会在数据集中创建多个表。表格已给出递增的默认名称TableN,以"Table"开头Table0。如果表名作为参数传递给Fill方法,表被赋予一个递增的默认名称TableNameN,以"TableName"开头

过程返回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不知道如何称呼这个"虚拟表"或结果集