2011-12-27 37 views
7

我創建了一個類似於小型收銀員應用程序,爲客戶,員工,服務,銷售和約會記錄。我正在使用Windows窗體,並在該DataGrids內。我已經創建了我要用於應用程序的數據庫。我想知道是否應該使用SqlCommand-SqlDataReader或SqlDataAdapter-DataSet。哪種方法更好?SqlCommand或SqlDataAdapter?

+0

可能重複(http://stackoverflow.com/questions/1676753/sqldataadapter-vs-sqldatareader) – 2011-12-27 04:10:43

+0

[SqlDataAdapter的VS SqlDataReader的](的可能的複製http://stackoverflow.com/問題/ 1676753/sqldataadapter-vs-sqldatareader) – 2017-02-18 19:49:54

回答

13

這很大程度上取決於您想要的操作類型。

以下是我的建議。

  1. 如果你想讀數據的速度去SqlDataReader的但正值運營成本,你需要在那之後也讀期間採取 。 打開連接 讀取數據 關閉連接。如果你忘記關閉,那麼它會擊中表演。

  2. 轉到了SqlDataAdapter的

    • 如果你想閱讀速度更快,斷開拱的好處。 ADO.net
    • 這將自動關閉/打開連接。
    • 此外,它也將允許您自動處理DataSet中的更新回數據庫。 (SqlCommandBuilder)
  3. 使用SQLCommand(當讀取SQLDataReader讀取數據時也會發生此問題)以及插入和更新。

    • 這會爲您提供更好的插入和更新性能。

如果您使用的是.NET框架3.5 SP1或更高版本,我建議LINQ到SQL或實體框架也 將解決你的目的。

謝謝。

2

如果您知道這些組件(Core ADO.NET)(Command,Connection,DataAdapter),那麼我會建議Entity Data ModelLinq-SQL

SqlDataAdapter是隱式使用SqlCommandSqlConnectionSqlDataReader輔助類。

4

SqlDataAdapter

  • 在客戶端和更新數據庫存儲的數據是必要的。所以它 消耗更多的內存。
  • 另一方面,您不需要將 連接到您的數據庫上的insert/delete/update/select命令。
  • 它在內部管理連接,所以你不必擔心 。

所有來自SqlDataAdapter的好東西都是以更多的內存消耗爲代價的。它通常用於需要連接到數據庫的多個用戶的系統。
所以我會說,如果這不是你的情況去SqlCommand和連接模型。

2

如果您只是讀取數據而不進行更新/插入/刪除,那麼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數據。否則,有更快/更好的做事方式。

+0

數據適配器可以插入數百萬條記錄(我的數據集中有2-3百萬條記錄)嗎? – 2016-06-20 09:56:38

1

DataReader - 該數據搜尋器是來自數據庫的只向前,只讀數據流 。這使得數據讀取器是用於檢索數據的非常有效的手段 ,因爲只有一條記錄在 時間被帶入存儲器。缺點:連接對象一次只能包含一個 數據讀取器,因此我們必須在 已完成時明確關閉數據讀取器。這將釋放連接以用於其他用途。所述 數據適配器對象將管理打開和關閉用於 要執行的命令

DataAdapter的連接 - 表示一組SQL命令和用於填充DataSet和更新數據 源數據庫 連接。它作爲數據集和數據源之間的橋樑,用於檢索和保存數據。 DataAdapter通過 映射Fill來映射Fill,該Fill改變DataSet中的數據以匹配數據源中的數據 ,Update和Update更改數據源 中的數據以匹配DataSet中的數據。通過使用它,DataAdapter也會自動打開並在需要時關閉連接。

[SqlDataAdapter的VS SqlDataReader的]的