以下两种方案假定你使用的是SqlServer数据库,
采用了SqlClient命名空间,如果采用你采用OleDb或者Odbc命名空间,代码稍做修改就同样适用.
不过OracleClient命名空间因为没有环境就没有测试,估计第二种方案会麻烦一些,可以参考MS的kb.
1.在DataAdapter的SelectCommand的CommandText中直接采用批查询
例如:
strSql = "SELECT * FROM Orders;SELECT * FROM Customers";
SqlDataAdapter daData = new SqlDataAdapter(strSql,new SqlConnection("server=XLZHU;User ID=sa;Password=111111;database=Northwind"));
//daData.TableMappings.Add("Table","Order_Info");
//daData.TableMappings.Add("Table1","Customer_Info");
DataSet dsData = new DataSet();
daData.Fill(dsData);
这样,dsData中就会有两个DataTable,分别为Table和Table1(去掉注释名称就为Order_Info和Customer_Info).
2.使用存储过程
例如:
先写一个名为GetCustomers的存储过程,用来取得第二个数据表(使用上面的第二条语句"CREATE PROCEDURE GetCustomers AS SELECT * FROM Customers");
再写一个名为GetData的存储过程,在取得第一个数据表所需的数据后(第一条语句),继续Exec GetCustomers;
例如:
"CREATE PROCEDURE GetData AS
SELECT * FROM Orders
EXEC GetCustomers"
代码可以这样写:
SqlDataAdapter daData = new SqlDataAdapter();
//daData.TableMappings.Add("Table","Order_Info");
//daData.TableMappings.Add("Table1","Customer_Info");
daData.SelectCommand = new SqlCommand();
daData.SelectCommand.Connection = new SqlConnection("server=XLZHU;User ID=sa;Password=111111;database=Northwind");
daData.SelectCommand.CommandType = CommandType.StoredProcedure;
daData.SelectCommand.CommandText = "GetData";
DataSet dsData = new DataSet();
daData.Fill(dsData);
同样,我们也得到了两个DataTable, 分别为Table和Table1(去掉注释名称就为Order_Info和Customer_Info).