我在我的Asp.NetCore应用程序中使用NReco.Data来进行db调用,因为我不想使用EF而且还不支持DataTable。
现在我需要调用StoredProcedure并获取Multiple RecordSets(或Dictionarylists)。
此刻我打电话给:
dbAdapter.Select($"STOREDNAME @{nameof(SQLPARAMETER)}", SQLPARAMETER).ToRecordSet()
但是存储给了我超过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
(如果需要)。