0

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

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

目前我称之为: dbAdapter.Select($"STOREDNAME @{nameof(SQLPARAMETER)}", SQLPARAMETER).ToRecordSet()

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

4

1 回答 1

0

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

您可以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 的作者,我认为可以轻松地将对多个结果集的支持添加到DbDataAdapterAPI(我刚刚在 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如果需要。

于 2017-03-23T09:12:25.927 回答