我有存储过程,它返回多个表作为 ResultSet。我将它存储在 DataTable 中并将该 DataTable 对象传递给另一个在我的网页中打印表格的表单。 我的问题是如何将从存储过程返回的多个结果集存储到我可以返回到另一个函数的单个 DataTable 对象中。
public static DataTable[] getGraphData(Int32 type)
{
SqlConnection oConn = null;
DataSet dsReturn = null;
DataTable[] dtReturn=new DataTable[2];
try
{
getConnection(ref oConn, 1);
using (SqlStoredProcedure sspObj = new SqlStoredProcedure("dbo.usp_getGraphData", oConn, CommandType.StoredProcedure))
{
sspObj.AddParameterWithValue("@Type", SqlDbType.Int, 0, ParameterDirection.Input, type);
dsReturn = sspObj.ExecuteDataSet();
dtReturn[0] = dsReturn.Tables[0];
dtReturn[1] = dsReturn.Tables[1];
dtReturn[2] = dsReturn.Tables[2];
sspObj.Dispose();
}
closeConnection(ref oConn);
}
catch (Exception xObj)
{
//dtReturn[] = new DataTable();
}
return dtReturn;
}
获取所有三个数据表的函数
DataTable dtOutput = Generix.getGraphData(type);
如何从这里获取每个数据表?意味着 dtOutput1 的第 0 个元素,dtOutput2 的第 1 个元素......明智的
最佳答案
你为什么不像 podiluska 提到的那样使用数据集,然后访问 DataSet.Tables 属性来一张一张地获取你的三个表。
如果三个表结构不同,将它们拼成一个表是没有意义的。为此,DataSet 是更好的方法。这是您的表格的集合。
编辑有关 DataTable[] 的问题:
DataTable[] dtOutputs = Generix.getGraphData(type);
//dtReturn[0]
DataTable dtOutput0 = dtOutputs[0];
//dtReturn[1]
DataTable dtOutput1 = dtOutputs[1];
//dtReturn[2]
DataTable dtOutput2 = dtOutputs[2];
或者,如果您不仅需要引用那些表,还需要复制它们,您可以像这样使用 .Copy():
//dtReturn[0]
DataTable dtOutput1 = dtOutputs[1].Copy;
我仍然认为最好的方法是通过查询返回一个数据集(从中进行数据表查询没有意义。)
public static DataSet getGraphData(Int32 type)
{
SqlConnection oConn = null;
DataSet dsReturn = null;
try
{
getConnection(ref oConn, 1);
using (SqlStoredProcedure sspObj = new SqlStoredProcedure("dbo.usp_getGraphData", oConn, CommandType.StoredProcedure))
{
sspObj.AddParameterWithValue("@Type", SqlDbType.Int, 0, ParameterDirection.Input, type);
dsReturn = sspObj.ExecuteDataSet();
//You don't need Dispose() - because the using will do that on sspObj
}
closeConnection(ref oConn);
}
catch (Exception xObj)
{
dsReturn = new DataSet("Empty");
}
return dsReturn ;
}
然后像这样调用方法:
DataSet dsOutput = Generix.getGraphData(type);
//Simply a reference or Copy() the DataSet's tables:
DataTable dtOutput0 = dsOutput.Tables[0];
DataTable dtOutput1 = dsOutput.Tables[1];
DataTable dtOutput2 = dsOutput.Tables[2];
关于c# - 从单个 DataTable 对象中的存储过程返回多个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12121758/