我創建了一個類似於小型收銀員應用程序,爲客戶,員工,服務,銷售和約會記錄。我正在使用Windows窗體,並在該DataGrids內。我已經創建了我要用於應用程序的數據庫。我想知道是否應該使用SqlCommand-SqlDataReader或SqlDataAdapter-DataSet。哪種方法更好?SqlCommand或SqlDataAdapter?
回答
這很大程度上取決於您想要的操作類型。
以下是我的建議。
如果你想讀數據的速度去SqlDataReader的但正值運營成本,你需要在那之後也讀期間採取 。 打開連接 讀取數據 關閉連接。如果你忘記關閉,那麼它會擊中表演。
轉到了SqlDataAdapter的
- 如果你想閱讀速度更快,斷開拱的好處。 ADO.net
- 這將自動關閉/打開連接。
- 此外,它也將允許您自動處理DataSet中的更新回數據庫。 (SqlCommandBuilder)
使用SQLCommand(當讀取SQLDataReader讀取數據時也會發生此問題)以及插入和更新。
- 這會爲您提供更好的插入和更新性能。
如果您使用的是.NET框架3.5 SP1或更高版本,我建議LINQ到SQL或實體框架也 將解決你的目的。
謝謝。
如果您知道這些組件(Core ADO.NET)(Command,Connection,DataAdapter),那麼我會建議Entity Data Model
或Linq-SQL
。
SqlDataAdapter
是隱式使用SqlCommand
,SqlConnection
和SqlDataReader
輔助類。
SqlDataAdapter
- 在客戶端和更新數據庫存儲的數據是必要的。所以它 消耗更多的內存。
- 另一方面,您不需要將 連接到您的數據庫上的
insert/delete/update/select
命令。 - 它在內部管理連接,所以你不必擔心 。
所有來自SqlDataAdapter
的好東西都是以更多的內存消耗爲代價的。它通常用於需要連接到數據庫的多個用戶的系統。
所以我會說,如果這不是你的情況去SqlCommand和連接模型。
如果您只是讀取數據而不進行更新/插入/刪除,那麼SqlDataReader
會更快。您也可以將其與DataSet
結合使用。如果用using
語句包裝數據訪問對象,則運行時將爲您處理連接清理邏輯。
我經常使用的同步訪問的模式是這樣的:
DataTable result = new DataTable();
using (SqlConnection conn = new SqlConnection(MyConnectionString))
{
using (SqlCommand cmd = new SqlCommand(MyQueryText, conn))
{
// set CommandType, parameters and SqlDependency here if needed
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
result.Load(reader);
}
}
}
對於更新/刪除/插入,一個SqlDataAdapter
可能是值得考慮的,但通常只有當你已經有了一個DataSet
數據。否則,有更快/更好的做事方式。
數據適配器可以插入數百萬條記錄(我的數據集中有2-3百萬條記錄)嗎? – 2016-06-20 09:56:38
[SqlDataAdapter的VS SqlDataReader的]的DataReader - 該數據搜尋器是來自數據庫的只向前,只讀數據流 。這使得數據讀取器是用於檢索數據的非常有效的手段 ,因爲只有一條記錄在 時間被帶入存儲器。缺點:連接對象一次只能包含一個 數據讀取器,因此我們必須在 已完成時明確關閉數據讀取器。這將釋放連接以用於其他用途。所述 數據適配器對象將管理打開和關閉用於 要執行的命令
DataAdapter的連接 - 表示一組SQL命令和用於填充DataSet和更新數據 源數據庫 連接。它作爲數據集和數據源之間的橋樑,用於檢索和保存數據。 DataAdapter通過 映射Fill來映射Fill,該Fill改變DataSet中的數據以匹配數據源中的數據 ,Update和Update更改數據源 中的數據以匹配DataSet中的數據。通過使用它,DataAdapter也會自動打開並在需要時關閉連接。
- 1. 的SqlCommand與SqlDataAdapter的
- 2. SqlDataAdapter的,SqlCommand的從字符串
- 3. 創建SQLCommand以便在SQLDataAdapter中使用
- 4. 獲取的SqlDataAdapter和SqlCommand的困惑
- 5. SqlCommand VarChar或Int?
- 6. 嘗試在SqlDataAdapter中傳遞SqlCommand作爲參數
- 7. 在我的C#代碼中替換SqlCommand的SqlDataAdapter
- 8. 你應該重用SqlConnection,SqlDataAdapter和SqlCommand對象嗎?
- 9. 通過SQL表(LINQ或SqlCommand時)
- 10. C#和SqlDataAdapter的
- 11. 填充SqlDataAdapter
- 12. 與SqlDataAdapter的
- 13. C#sqldataadapter datatablemapping
- 14. SqlDataAdapter不更新
- 15. SqlDataAdapter的更新
- 16. SqlDataAdapter和SqlDataReader
- 17. SqlDataAdapter問題
- 18. 刪除SQLDataadapter
- 19. SqlDataAdapter的工作不
- 20. SqlDataAdapter UpdateBatchSize行錯誤
- 21. SqlDataAdapter不返回行
- 22. 用SqlDataAdapter計算行
- 23. 的SqlDataAdapter:空結果
- 24. 是否有SqlDataAdapter的
- 25. SqlDataAdapter加入語句
- 26. Data Adpater vs SQLCommand
- 27. OutOfMemoryException SqlCommand VarChar(Max)
- 28. Sqlcommand去執行
- 29. 改變表SqlCommand
- 30. SqlCommand的asp.net C#
可能重複(http://stackoverflow.com/questions/1676753/sqldataadapter-vs-sqldatareader) – 2011-12-27 04:10:43
[SqlDataAdapter的VS SqlDataReader的](的可能的複製http://stackoverflow.com/問題/ 1676753/sqldataadapter-vs-sqldatareader) – 2017-02-18 19:49:54