2017-03-23 29 views
0

我在我的Asp.NetCore應用程序中使用NReco.Data進行數據庫調用,因爲我不想使用EF,並且DataTable不受支持然而。如何使用Asp.NetCore中的NReco.Data從StoredProcedure獲取多個RecordSet

現在我需要調用StoredProcedure並獲得多個RecordSet(或Dictionarylists)。

在我稱這一刻: dbAdapter.Select($"STOREDNAME @{nameof(SQLPARAMETER)}", SQLPARAMETER).ToRecordSet()

,但是存儲的給了我1個多記錄,任何人都可以幫助我獲得別人呢?

回答

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

相關問題