当前,我有一个存储过程,该存储过程返回基于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
?
答案 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);
}