2014-09-02 102 views
3

憑藉短小精悍,我可以做批處理執行存儲過程,類似於:小巧玲瓏QueryMultiple存儲過程W/O映射到對象

connection.Execute(@" 
    exec sp1 @i = @one, @y = @two 
    exec sp2 @i = @three", 
    new { one = 1, two = 2, three = 3 }); 

然而,檢索數據的唯一手段,我已經看到到現在是通過使用

results.Read<Type>() 

如果結果不映射到對象會怎麼樣?例如,我正在寫「通用」代碼來執行任何帶有變量輸入/輸出參數&結果集的SP。

謝謝

回答

2

你想要什麼API?如果你可以單獨處理網格:這樣做:

using(var multi = connection.QueryMultiple(...)) 
{ 
    while(!multi.IsConsumed) { 
     // ... 
    } 
} 

其中...訪問:

  • Read()dynamic行 - IDictionary<string,object>
  • Read<T>()的類型化提的是,各行也實現通過仿製藥排
  • Read(Type)對於沒有仿製藥的打字行
  • Read<DapperRow>()(實際上,這僅僅是TRead<T>()用來實現Read(),但也許更方便),它提供了元數據

如果你要下降到原始IDataReader稍微訪問,請即:

using(var reader = connection.ExecuteReader(...)) { 
    // whatever you want 
} 

至於參數:DynamicParameters類提供給參數控制更加豐富的機會,包括參數方向等

+0

所以每.Read()返回單個網格結果,因爲「exec」的順序已發送,對嗎?此外,當您說.ExecuteReader時,這是由Dapper提供的擴展方法,它提供原始訪問,類似於ADO.NET中的DataReader?最後,一個問題DP可以同時用於QueryMultiple和ExecuteReader?順便說一下,我在Dapper上觀看了Pluralsight的視頻,看起來非常好。 – Bill 2014-09-02 12:21:26

+0

「是」(實際上,它是按照執行的「select」順序進行的 - 它看不到任何其他內容),「是」和「是」 – 2014-09-02 12:30:50

+0

還有一個問題,如果我是使用QueryMultiple和DynamicParameters,我可以將sql作爲多個存儲過程調用傳遞,並用「;」分隔,然後爲所有SP提供一個包含所有參數的DynamicParameter對象?謝謝 – Bill 2014-09-13 06:52:45