我使用C#。我用sql查询的结果填充数据集。假设ds
是我的数据集:
Dataset ds = new Dataset();
ds = GetTablesFromDataBase("Select * from Order, Select * from OrderDetails, Select * from Product");
运行上面的代码后,我的数据集包含三个名为Table
,Table1
,Table2
的表。但我希望我的数据集表名称与数据库表名称相同,如:Order
,OrderDetails
,Product
。有没有办法编写查询或代码,以便数据集表名称与数据库表名称相同?
请不要提出以下代码来更改数据集的表名:
Dataset.TableName = "RequiredTableName";
答案 0 :(得分:4)
您可以使用类型化数据集或表格映射
类似这样的事情
SqlDataAdapter da = new SqlDataAdapter(...);
DataSet ds = new DataSet();
DataTableMapping dtm1, dtm2, dtm3;
dtm1 = da.TableMappings.Add("Table", "Employees");
dtm2 = da.TableMappings.Add("Table1", "Products");
dtm3 = da.TableMappings.Add("Table2", "Orders");
da.Fill(ds);
答案 1 :(得分:1)
您应该使用DataTable类。以下是相同的mSDN参考:http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx 它允许您定义所需的所有属性,并为您提供更多函数来使用该表。
并且因为你似乎喜欢在一个类中拥有所有表,我建议你创建一个DTO,它基本上类似于你想要使用DataSet类的任何属性,并添加IList作为这个DTO的属性之一。
希望这有意义并帮助你。
答案 2 :(得分:0)
ds.Tables[0].TableName = "Required Table Name";
ds.Tables[1].TableName = "Required Table Name";
ds.Tables[2].TableName = "Required Table Name";
您可以使用此方法。
答案 3 :(得分:0)
您可以使用单独的选择返回表的名称。
SELECT 'Employees','Orders';
SELECT * FROM Employees;
SELECT * FROM Orders;
(您也可以从全局系统表中选择表名...)
然后,您可以自动在DataSet中设置表名:
for (int cIdx = 0; cIdx < ds.Tables[0].Columns.Count; ++cIdx) {
int tIdx = cIdx + 1;
if (tIdx >= ds.Tables.Count) {
break;
}
ds.Tables[tIdx].TableName = ds.Tables[0].Rows[0][cIdx].ToString().Trim();
}
ds.Tables.RemoveAt[0];
这也只是一种解决方法,但我不知道更好的方法。