是否可以从存储过程返回多个结果集?

时间:2019-01-27 15:51:35

标签: c# sql-server dataset sql-server-2016 dapper

当前,我有一个存储过程,该存储过程返回基于2个表的XML。然后,将XML导入到DataSet中:

var xml = conn.QueryFirst<string>("myproc", new { id }, commandType: CommandType.StoredProcedure);

using (var sr = new StringReader(xml))
{
    var ds = new DataSet();
    ds.ReadXml(sr);

    return ds;
}

这种方法的问题是我需要将列转换为正确的数据类型,并且无法按预期工作。

代替此额外步骤,是否可以将存储过程的结果直接返回到DataSet中?显然,随后将对存储过程进行相应的更改,以便返回结果集而不是XML。

编辑

Dapper有QueryMultiple,但是如何将每个结果返回到表中。我是否需要采取额外的步骤将结果作为dynamic,然后为每个结果创建DataTable

1 个答案:

答案 0 :(得分:1)

您可以使用SqlDataAdapter.Fill加载具有多个结果集的数据集,其中包含存储过程返回的每个结果的表:

using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand("myproc", connection) {  CommandType = CommandType.StoredProcedure })
using (var dataAdapter = new SqlDataAdapter(command))
{
    command.Parameters.Add("@id", SqlDbType.Int).Value = id;
    dataAdapter.Fill(dataSet);
}
相关问题