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会被赋值,在删除时永远不会,在这两种情况下,数据库本身中都不会真正更新任何内容。

你知道我做错了什么吗?

DataAdapter.Update()不更新数据库中的数据

确保在调用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('