【问题标题】:Define table names for results of multiple SQL selects in a single query在单个查询中为多个 SQL 选择的结果定义表名
【发布时间】:2010-09-20 07:09:10
【问题描述】:

例如,如果我运行以下查询:

select * from table1
select * from table2

并使用 DB 适配器 (C#) 运行它,我得到一个包含两个表的数据集。 如何在 SQL 中定义结果表的名称?

我只能在 SQL 中执行此操作。我无权访问 c# 代码。

【问题讨论】:

    标签: c# sql ado.net dataadapter


    【解决方案1】:

    @Timothy Khouri:可以做到!编辑:但不是在 SQL 级别!

    您可以在 DataAdapter 上使用 TableMappings。

    如果 DataAdapter 的 SelectCommand 返回多个结果集,则 DataAdapter 使用表映射来填充 DataSet 中相应的 DataTable。默认情况下,第一个结果集将填充到名为“Table”的DataTable,第二个结果集将填充到名为“Table1”的DataTable,以此类推。

    SqlDataAdapter sqlDa = new SqlDataAdapter();
    SqlCommand selectCmd = new SqlCommand();
    selectCmd.CommandText = "spReturnMultpileResultSets";
    selectCmd.CommandType = CommandType.StoredProcedure;
    selectCmd.Connection = this.sqlConnection1;
    sqlDa.SelectCommand = selectCmd;
    
    // Add table mappings to the SqlDataAdapter
    sqlDa.TableMappings.Add("Table", "Customers");
    sqlDa.TableMappings.Add("Table1", "Orders");
    
    // DataSet1 is a strongly typed DataSet
    DataSet1 ds = new DataSet1();
    
    this.sqlConnection1.Open();
    
    sqlDa.Fill(ds);
    
    this.sqlConnection1.Close();
    

    参考:

    http://blogs.msdn.com/vsdata/archive/2007/03/08/tableadapter-multiple-result-sets.aspx http://www.eggheadcafe.com/software/aspnet/32696845/strongly-typed-datasets.aspx

    【讨论】:

    • 很好的答案,我应该澄清我的回答:) 你可以随时重命名它们(或使用你所说的映射),但你基本上只是脱离序数。我们遇到了一个问题,即一个存储过程调用另一个存储过程,而开发人员更改了第二个存储过程以在两者之间进行选择! (崩溃)
    • @mitch 在没有明确启用MARS 的情况下我们得到了多个结果集,这有点奇怪——默认情况下它没有启用,但它仍然有效。我知道因为我正在工作(填充数据集)并且我们没有启用火星。然而 - 没有火星启用它如何工作?你能解释一下吗?
    猜你喜欢
    • 2011-07-01
    • 2021-11-12
    • 2021-08-16
    • 2023-03-11
    • 2013-08-10
    • 2020-11-22
    • 1970-01-01
    • 2022-07-27
    • 2011-07-09
    相关资源
    最近更新 更多