在 SQL 查询中如何设置表名?

3

我使用C#语言。我通过sql查询获得的结果来填充数据集。假设ds是我的数据集:

Dataset ds = new Dataset();
ds = GetTablesFromDataBase("Select * from Order, Select * from OrderDetails, Select * from Product");

在运行上述代码后,我的数据集包含三个表,分别命名为TableTable1Table2。但是我希望我的数据集表名与数据库表名相同,例如:OrderOrderDetailsProduct。是否有办法编写查询或代码,使得数据集表名与数据库表名相同?
请不要提出以下更改数据集表名的代码:
Dataset.TableName = "RequiredTableName"; 

通常认为从表中选择是不好的做法:更好的做法是列出所需的特定列。使用会使应用程序在数据库模式更改时更加脆弱。 - Chris Walton
克里斯·沃尔顿,感谢您的建议。 - shamim
4个回答

5
你可以使用类型化数据集或表映射
像这样
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

你应该使用 DataTable 类。这里是相同内容的 mSDN 参考链接:http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx。它允许你定义所有想要的属性,并提供更多操作表格的函数。

既然你似乎喜欢将所有表格放在一个类中,我建议你创建一个 DTO,基本上类似于你想要使用 DataSet 类的任何属性,并将 IList 添加为此 DTO 的属性之一。

希望这有意义并对你有所帮助。


0
你可以使用单独的select语句返回表名。
SELECT 'Employees','Orders';
SELECT * FROM Employees;
SELECT * FROM Orders;

(您还可以从全局系统表中选择表名...)

然后,您可以自动设置数据集中的表名:

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];

这只是一个权宜之计,但我不知道更好的方法。


0

ds.Tables[0].TableName = "所需表名";
ds.Tables[1].TableName = "所需表名";
ds.Tables[2].TableName = "所需表名";

您可以使用这种方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接