DataAdapter.Update()不更新数据库中的数据
本文关键字:数据库 数据 更新 Update DataAdapter | 更新日期: 2023-09-27 18:01:15
我有一项任务需要更新northwind数据库,我已经完成了所有像教程所说的
我用DataAdapter.Fill(table)
填充DataTable
。
我使用CommangBuilder
构建Delete,Insert,Update
命令
SqlDataAdapter adapter = new SqlDataAdapter(selectStr, conn);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.DeleteCommand = builder.GetDeleteCommand(true);
adapter.UpdateCommand = builder.GetUpdateCommand(true);
adapter.InsertCommand = builder.GetInsertCommand(true);
adapter.Fill(employees_table);
我还为表设置了一个主键:
DataColumn[] employees_keys = new DataColumn[2];
employees_keys[0] = employees.Columns["EmployeeID"];
employees_table.PrimaryKey = employees_keys;
现在我尝试删除并添加一行:
// accepts an employee object and creates a new new row with the appropriate values for
// an employee table row
DataRow row = ConvertEmployeeToRow(employeeToAdd);
employee_table.Rows.Add(row);`
并删除一行:
DataRow row = employees.Rows.Find(employeeToDismiss.ID);
employees.Rows.Remove(row);
我还应该指出,我已经尝试使用row.SetAdded()
和row.Delete()
不管怎样,最后当我尝试更新数据库时
int k = employees_adapter.Update(employees_table);
在添加的行中,有时k会被赋值,在删除时永远不会,在这两种情况下,数据库本身中都不会真正更新任何内容。
你知道我做错了什么吗?
确保在调用Update()
之后调用employee_table.AcceptChanges()
以将更改保存到数据库中。
检查CommandBuilder
是否真的为您生成了Update
命令,如下所示:
MessageBox.Show(adapter.UpdateCommand.CommandText);
如果主键信息丢失,它根本不会生成更新命令!
我不太清楚您的SqlDataAdapter名称是adapter,而您正在employees_adapter中进行更新。使用SqlDataAdapter的步骤非常简单,只需遵循以下即可
第1步:
SqlDataAdapter adapter = new SqlDataAdapter(selectStr, conn);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
DataTable employees_table= new DataTable ();
adapter.Fill(employees_table);
第2步:
在您获得数据集中的数据后,开始对其进行操作。
插入:
DataRow MyRow = employees_table.NewRow();
//Now Fill data in MyRow
employees_table.Tables[0].Rows.Add(MyRow);
employees_table.AcceptChanges();
adapter.Update(employees_table);
删除:
/get only the rows you want
DataRow[] result = employees_table.Select("ID ="+id); //id will be provided by you
//Now do here data updation
employees_table.AcceptChanges()
adapter.Update(employees_table);
就像明智一样,你可以应用更新。。但在进行任何更改后,必须调用
桌子接受Changes((,然后接受适配器。更新(employees_table('