![](/img/trans.png)
[英]ado.net using same sqlcommand object to execute multiple commands
[英]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.");
為什么第二個代碼使用數據集而不是直接將值插入數據庫? 插入值的最佳方法是什么? 第一個還是第二個?
好問題 - 雖然數據集不緩存數據,但它創建了一個與數據庫分開的數據集,允許進一步操作數據。
在下面的文章中,有對游標的引用。 由於游標允許正向和反向讀取(與僅正向相反,盡管可以指定該條件),因此它對於諸如售票之類的條件很有用。 在門票銷售中,用戶可以請求 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.