簡體   English   中英

僅使用 Sqlcommand 插入值與在 ADO.NET 中使用數據適配器插入值有什么區別?

[英]What is the difference of inserting values with just using the Sqlcommand vs. using a data adapter in ADO.NET?

我是 ADO.Net 的新手,我剛接觸到數據適配器和數據集,但我還不能完全理解它們的概念。 這段代碼有什么區別:

string firstName = "Jane";
string lastName = "Doe";
string age = 25;
    
string insertString = @"INSERT INTO dbo.Customer (FirstName, LastName, Age)
VALUES (@FirstName, @LastName, @Age)";
    
SqlCommand insertCommand = new SqlCommand(insertString, connection);
    
insertCommand.Parameters.Add("@FirstName", System.Data.SqlDbType.NVarChar, 100).Value = firstName;
insertCommand.Parameters.Add("@LastName", System.Data.SqlDbType.NVarChar, 100).Value = lastName;
insertCommand.Parameters.Add("@Age", System.Data.SqlDbType.Int).Value = age;
    
Console.WriteLine("Record has been added.");
    
connection.Open();
insertCommand.ExecuteNonQuery();

這個代碼有嗎?

SqlCommand selectCommand = new SqlCommand("SELECT * FROM dbo.Customer", connection);
SqlCommand insertCommand = new SqlCommand("INSERT INTO dbo.Customer (FirstName, LastName, Age) VALUES (@FirstName, @LastName, @Age)", connection);
    
insertCommand.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar, 30, "FirstName"));
insertCommand.Parameters.Add(new SqlParameter("@LastName", SqlDbType.NVarChar, 50, "LastName"));
insertCommand.Parameters.Add(new SqlParameter("@Age", SqlDbType.Int, 0, "Age"));
    
SqlDataAdapter dataAdapter = new SqlDataAdapter();
    
dataAdapter.SelectCommand = selectCommand;
dataAdapter.InsertCommand = insertCommand;
    
connection.Open();
    
DataSet dataSet = new DataSet("DataSet");
    
dataAdapter.Fill(dataSet, "Customer");
    
DataRow dataRow = dataSet.Tables[0].NewRow();
dataRow["FirstName"] = "Jane";
dataRow["LastName"] = "Doe";
dataRow["Age"] = 25;
    
dataSet.Tables[0].Rows.Add(dataRow);
    
dataAdapter.Update(dataSet, "Customer");
    
Console.WriteLine("Record has been added.");

為什么第二個代碼使用數據集而不是直接將值插入數據庫? 插入值的最佳方法是什么? 第一個還是第二個?

你是對的,第二種方法使用一組類似的 SQL 命令,並且也只插入一行。 對於相同的結果,這絕對是更多的努力。

但是,數據集、數據表和數據適配器的整個概念比本示例中顯示的要強大得多。 數據集(和數據表)可以在 memory 中保留一組數據,記錄對它們的更改,並在以后通過知道哪些語句用於哪種更改的數據適配器將它們持久化。

您可以決定在特定場景中是否需要數據集(或像實體框架這樣的對象關系映射器)的好處,或者是否有一堆 SQL 命令來執行任務就足夠了。

有關數據集和關鍵概念的詳細信息,請參閱此鏈接。 鏈接詳細說明了是否使用數據集或簡單的 SQL 語句(使用數據閱讀器)所涉及的一些因素。

好問題 - 雖然數據集不緩存數據,但它創建了一個與數據庫分開的數據集,允許進一步操作數據。

在下面的文章中,有對游標的引用。 由於游標允許正向和反向讀取(與僅正向相反,盡管可以指定該條件),因此它對於諸如售票之類的條件很有用。 在門票銷售中,用戶可以請求 10 張門票,但此時需要驗證信用信息。 如果結果未經驗證,則池保留在 state 中,在驗證失敗后,幾乎可以立即將相同的門票出售給另一個買家。 這假設連接已鎖定或數據集中的數據具有某種鎖定機制。

將數據集與數據庫分開允許使用稱為“編組”的舊 ADO 術語。 基本上,在這種情況下,您對數據使用三點方法進行編組。 一,你有讀取時提取的數據,二,你有當前的 state,三,你有一個編組條件,說在放回數據時覆蓋數據,只放回發生變化的數據,但在哪里原版仍然與原版 state 相同(意味着它尚未更改)或完全失敗並要求用戶決定如何處理不匹配的更改。

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/retrieving-data-using-a-datareader

數據閱讀器是一種不同的方法,但它解釋了如何將數據與數據庫分開保存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM