2008-11-01 84 views
4

例如选择,如果我运行下面的查询:定义表名称为多个SQL结果在一个单一的查询

select * from table1 
select * from table2 

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

我只能在SQL里面做这个。我无法访问C#代码。

回答

8

@Timothy Khouri:它可以完成!编辑:但不在SQL级别!

您可以在DataAdapter上使用TableMappings。

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

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

+0

优秀的答案,我应该澄清我的回应:)你可以随时重命名他们(或使用你所说的映射),但你基本上只是脱离序数。 我们遇到了一个问题,其中一个存储过程称为另一个存储过程,而另一个存储过程则改变了第二个存储过程以做出选择! (崩溃) – 2008-11-01 17:43:45