dbo设置.表名作为DataTable name
本文关键字:DataTable name 设置 dbo | 更新日期: 2023-09-27 17:53:30
我有一个返回14个表的存储过程。现在,在我的应用中,数据集包含所有的数据表,数据表名称为table, table1, table2, table3…等等。这里我想要的是,我的数据集所有的数据表都应该与数据库表名同名。这可能吗?
谢谢。
这里有一个要点可以帮助您进行此映射。
用法:
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
}
}
这里有一个不同的方法使用DataReader
和DataSet.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不知道如何称呼这个"虚拟表"或结果集