Вы можете добавить имя при выполнении операции заливки, например:
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;
}