我在Microsoft SQL Server 2005的存儲過程中編寫了三條select語句。兩個select語句都爲select語句返回多個記錄和表列表是不同的。一個從主表中選擇記錄,另一個從子表中選擇記錄。在C#代碼中,我想獲取所有這些記錄並將所有數據放入一個對象中。我正在使用SqlDataReader。它可能與它或我應該做別的。如何在存儲過程中使用多個select語句的情況下使用SqlDataReader
回答
您可以在數據採集器上使用the NextResult方法來使用查詢中的多個結果進行導航。
要遍歷所有的數據,你會做這樣的事情:
var moreResults = true;
while (moreResults)
{
while (reader.Read())
{
...
}
moreResults = reader.NextResult();
}
與
所以作爲背景,並假設主結果集至上,填充主機和明細對象可以這樣做:
首先,建立的主記錄的字典:
var masters = new Dictionary<int, Master>();
var idOrdinal = reader.GetOrdinal("id");
while (reader.Read())
{
var id = reader.GetInt32(idOrdinal);
masters.Add(id, new Master{Id=id, ....});
}
接下來,移動到詳細記錄,並添加這些到其對應的主:
reader.NextResult();
var masterIdOrdinal = reader.GetOrdinal("masterId");
while (reader.Read())
{
var masterId = reader.GetInt32(masterIdOrdinal);
var master = masters[masterId];
master.Details.Add(new Detail{....});
}
您應該明確地將列名替換爲數據中的內容,並提供Master和Detail對象的完整初始化。 如果詳細結果集在主ID上排序,則可以優化最後一個循環,以便僅從字典中查找一次每個主。如果結果集雖小,但收益不會那麼大。
...從主表 和子表另一個選擇。在記錄的C#代碼 我想這一切的記錄,並把 所有這些數據在一個對象...
Peter的解決方案解決了用單個DataReader
檢索多個結果的基本問題。但是,如果要將數據保存到複製Master-Details表之間關係的對象,則應該使用DataSet
代替。
數據集可以包含多個DataTable
s,並通過允許在表之間創建DataRelation
s來充分支持表之間的固有關係。然後,您可以分別通過Master或Details表中的GetChildRows()
或GetParentRows()
獲取每個場景的相關記錄。
網上可能有很多示例說明如何做到這一點。 Here's one discussion thread來自我的組,其中列出了步驟並提供了一些代碼來演示該過程。
謝謝。現在,我已經完成了我開始的工作:) – 2009-04-12 16:24:43
- 1. MySQL的使用情況下,語句轉換成存儲過程
- 2. 如何使用Select語句在存儲過程上使用LINQ?
- 3. 如何使用的情況下用select語句在SQL Server 2000
- 4. 如何在存儲過程的輸出中使用多個select語句?
- 5. 存儲和使用存儲過程中的select語句結果?
- 6. 在asp.net中使用Select語句調用存儲過程mvc
- 7. 從存儲過程中的select語句調用存儲過程
- 8. 在Select語句中使用存儲過程的結果
- 9. 如何在存儲過程中存儲多個SELECT語句的結果
- 10. 使用「的情況下,當」一個主義select語句
- 11. 如何在存儲過程中編寫多重select語句?
- 12. 使用存儲過程中的select語句賦值給參數
- 13. SQL Server存儲過程 - SELECT語句然後在INSERT語句中使用結果
- 14. SQL SELECT語句中的情況下
- 15. 多個SELECT語句中不經存儲過程在MySQL
- 16. MySQL的:使用SELECT語句的存儲過程的參數
- 17. 從存儲過程中獲取多個SELECT語句的結果
- 18. mysql存儲過程中的多個select語句
- 19. 從Excel VBA訪問SQL Server存儲過程(不包含SELECT語句),理想情況下不使用Excel Data Connections?
- 20. CASE在SELECT WHERE語句存儲過程?
- 21. 如何使用select語句初始化存儲過程中的變量
- 22. 在SQL中使用情況的select語句
- 23. 如何使用mysqli在php變量中存儲mysql select語句
- 24. 如何在存儲過程的SELECT語句中創建「假」行
- 25. SQL Server 2000-使用SELECT語句存儲過程參數值
- 26. SQL SERVER 2008 SELECT語句的情況下
- 27. 如何在mysql存儲過程中使用case-when語句?
- 28. 我如何在SQL存儲過程中使用IF語句
- 29. Switch語句。使用默認情況下
- 30. select語句的存儲過程
很好的答案,但我認爲你會留下部分問題沒有答案。 ;-) – Cerebrus 2009-04-12 12:37:10