如何使用Asp.NetCore中的NReco.Data从StoredProcedure获取多个RecordSet

时间:2017-03-23 08:23:38

标签: stored-procedures datatable asp.net-core nreco

我在我的Asp.NetCore应用程序中使用NReco.Data来进行db调用,因为我不想使用EF而且还不支持DataTable。

现在我需要调用StoredProcedure并获取Multiple RecordSets(或Dictionarylists)。

此刻我打电话给: dbAdapter.Select($"STOREDNAME @{nameof(SQLPARAMETER)}", SQLPARAMETER).ToRecordSet()

但是存储给了我超过1个记录集,任何人都可以帮助我获得其他记录集吗?

1 个答案:

答案 0 :(得分:0)

目前NReco.Data.DbDataAdapter没有用于处理单个IDbCommand返回的多个结果集的API。

您可以自己撰写IDbCommand,执行数据阅读器并按以下方式阅读多个结果集:

IDbCommand spCmd;  // lets assume that this is DB command for 'STOREDNAME'
RecordSet rs1 = null;
RecordSet rs2 = null;
spCmd.Connection.Open();
try {
    using (var rdr = spCmd.ExecuteReader()) {
        rs1 = RecordSet.FromReader(rdr);
        if (rdr.NextResult())
            rs2 = RecordSet.FromReader(rdr);
    }
} finally {
    spCmd.Connection.Close();
}

作为NReco.Data作者,我认为可以轻松地将对多个结果集的支持添加到DbDataAdapter API(我刚刚在github上创建了issue for that)。

- 更新 -

从NReco.Data v.1.0.2开始,可以通过以下方式处理多个结果集:

(var companies, var contacts) = DbAdapter.Select("exec STOREDNAME").ExecuteReader( 
  (rdr) => {
    var companiesRes = new DataReaderResult(rdr).ToList<CompanyModel>();
    rdr.NextResult();
    var contactsRes = new DataReaderResult(rdr).ToList<ContactModel>();
    return (companiesRes, contactsRes);
  });

以同样的方式DataReaderResult可以将结果映射到字典或RecordSet(如果需要)。