如何使用 NReco.Data in Asp.NetCore 从存储过程中获取多个 RecordSet

How to get multiple RecordSets from StoredProcedure with NReco.Data in Asp.NetCore

我在 Asp.NetCore 应用程序中使用 NReco.Data 进行数据库调用,因为我不想使用 EF 并且 DataTable 尚不受支持。

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

此刻我这样调用: dbAdapter.Select($"STOREDNAME @{nameof(SQLPARAMETER)}", SQLPARAMETER).ToRecordSet()

但是存储给了我不止 1 个记录集,谁能帮我得到其他的?

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

你可以自己组合IDbCommand,执行数据reader,读取多个结果集,方法如下:

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).

-- 更新--

从 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 如果需要的话。