cla*_*aws 25 c# mysql sql-server ado.net
我想使用SqlDataAdapter在数据库中插入一行.我在CustomerOrders数据库中有2个表(Custormers&Orders),并且有超过一千条记录.我想创建一个GUI(TextBoxes),用于将新的客户和订单添加到数据库中各自的表中.
我想通常遵循的方法是
dataAdapter = new SqlDataAdapter (sqlQuery, conn);
dataSet = new DataSet();
da.Fill(dataSet);
Run Code Online (Sandbox Code Playgroud)
现在从文本框中获取值(或使用DataBinding)将新行添加到dataSet并调用
da.Update(dataSet);
Run Code Online (Sandbox Code Playgroud)
但问题是为什么我应该首先使用da.Fill(dataSet)将所有其他记录提取到dataSet中?我只想添加一条新记录.
为此,我正在做的是,在DataSet中创建数据库的模式.像这样:
DataSet customerOrders = new DataSet("CustomerOrders");
DataTable customers = customerOrders.Tables.Add("Customers");
DataTable orders = customerOrders.Tables.Add("Orders");
customers.Columns.Add("CustomerID", Type.GetType("System.Int32"));
customers.Columns.Add("FirstName", Type.GetType("System.String"));
customers.Columns.Add("LastName", Type.GetType("System.String"));
customers.Columns.Add("Phone", Type.GetType("System.String"));
customers.Columns.Add("Email", Type.GetType("System.String"));
orders.Columns.Add("CustomerID", Type.GetType("System.Int32"));
orders.Columns.Add("OrderID", Type.GetType("System.Int32"));
orders.Columns.Add("OrderAmount", Type.GetType("System.Double"));
orders.Columns.Add("OrderDate", Type.GetType("System.DateTime"));
customerOrders.Relations.Add("Cust_Order_Rel", customerOrders.Tables["Customers"].Columns["CustomerID"], customerOrders.Tables["Orders"].Columns["CustomerID"]);
Run Code Online (Sandbox Code Playgroud)
我使用DataBinding将这些列绑定到相应的文本框.现在我很困惑!接下来我该怎么办?如何使用Insert命令?因为我没有给出任何dataAdapter.SelectCommand所以dataAdapter.Update()不会工作我想.请建议正确的方法.
Nat*_*lch 43
使用"0 = 1"过滤器设置select命令并使用SqlCommandBuilder,以便为您自动生成insert命令.
var sqlQuery = "select * from Customers where 0 = 1";
dataAdapter = new SqlDataAdapter(sqlQuery, conn);
dataSet = new DataSet();
dataAdapter.Fill(dataSet);
var newRow = dataSet.Tables["Customers"].NewRow();
newRow["CustomerID"] = 55;
dataSet.Tables["Customers"].Rows.Add(newRow);
new SqlCommandBuilder(dataAdapter);
dataAdapter.Update(dataSet);
Run Code Online (Sandbox Code Playgroud)
您可以填充dataSet空集,例如:
da = new SqlDataAdapter ("SELECT * FROM Customers WHERE id = -1", conn);
dataSet = new DataSet();
da.Fill(dataSet);
Run Code Online (Sandbox Code Playgroud)
然后添加行并调用update.
对于这种情况,尽管最好不要使用SqlDataAdapter.而是SqlCommand直接使用对象进行插入.(更好的是,使用LINQ to SQL或任何其他ORM)
| 归档时间: |
|
| 查看次数: |
60916 次 |
| 最近记录: |