在SQL Query中如何设置表名

时间:2011-02-27 10:37:40

标签: c# sql-server

我使用C#。我用sql查询的结果填充数据集。假设ds是我的数据集:

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

运行上面的代码后,我的数据集包含三个名为TableTable1Table2的表。但我希望我的数据集表名称与数据库表名称相同,如:OrderOrderDetailsProduct。有没有办法编写查询或代码,以便数据集表名称与数据库表名称相同?

请不要提出以下代码来更改数据集的表名:

Dataset.TableName = "RequiredTableName"; 

4 个答案:

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

这也只是一种解决方法,但我不知道更好的方法。