當你做填充operatation,這樣你可以添加一個名字:
da.Fill(ds, "MyTable");
從此時開始,你可以參考下表規定
ds.Tables["MyTable"];
而不是使用整數索引(即ds.Tables[0]
)
在這裏看到:http://msdn.microsoft.com/en-us/library/bh8kx08z(v=VS.100).aspx
編輯:
在你的情況,你可以使用TableName
屬性,像這樣:
da.Fill(ds);
ds.Tables[0].TableName = "Customers";
ds.Tables[1].TableName = "Employees";
這是快速和骯髒的方法,但不是很一般。不幸的是,沒有辦法從SP獲取表的名字,這可能是你想要的。要做到這一點的一種方法是修改SP返回的輸出參數:
CREATE PROCEDURE GetCustomers_Employees
@tableNames varchar(20) OUTPUT
AS
BEGIN
SET @tableNames = 'Customers,Employees'
SELECT top 10 * from Customers
SELECT top 10 * from Employees
END
但要利用這一點,你也必須修改SqlDataAdapter
來處理與輸出參數的存儲過程:
using (SqlConnection = ...)
{
// sqlConnection.Open(); // Not really needed. Data Adapter will do this.
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetCustomers_Employees";
cmd.Connection = sqlConnection;
// Create the parameter object and add it to the command
SqlParameter param = new SqlParameter("@tableNames", SqlDbType.VarChar);
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param);
// Get the Data
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
// Set the names of the tables in the dataset
string strTableNames = cmd.Parameters["@tableNames"].Value.ToString();
string[] tableNames = strTableNames.split(',');
for (int i=0; i<tableNames.Length; i++)
{
ds.Tables[i].TableName = tableNames[i];
}
}
注意上面將處理任意數量的表退回,所以你可以很容易地封裝在這一個功能,這可能對您有用:
DataSet function(string storedProcedureName, string connectionString)
{
DataSet ds = new DataSet();
... // code above, without DataSet declaration
return ds;
}
我比1個表嗎? – user603007 2011-04-19 00:16:36
@ user603007請參閱答案中的其他信息。這有點痛苦,但我認爲沒有更簡單的方法。 – 2011-04-19 05:39:32
另請參閱:http://support.microsoft.com/kb/322793 – bdwakefield 2011-12-06 13:49:10