【问题标题】:Is it possible to return multiple resultsets from a stored procedure? [duplicate]是否可以从存储过程返回多个结果集? [复制]
【发布时间】:2019-06-20 17:53:54
【问题描述】:

目前我有一个基于 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

【问题讨论】:

  • 您是否考虑过将 xml 反序列化为您定义的类型?您可以返回多个结果集,但很可能XmlSerializer 需要的更改最少。
  • 你为什么还要使用数据集?你不能用真正的具体类型来代替吗?
  • 这个问题已经回答了请参考这个帖子stackoverflow.com/questions/40013747/…

标签: c# sql-server stored-procedures dataset sql-server-2016


【解决方案1】:

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

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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 2016-03-27
    • 2017-02-14
    • 1970-01-01
    相关资源
    最近更新 更多