[英]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.