我有一项要求我更新northwind数据库的作业, 我已完成了教程如下所示的所有内容
我使用DataTable
填充DataAdapter.Fill(table)
。
我使用Delete,Insert,Update
CommangBuilder
命令
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得到重视,在删除时永远不会,并且在任何一种情况下,数据库本身都没有真正更新。
对我做错的任何见解?
答案 0 :(得分:6)
确保在调用employees_adapter.AcceptChanges()
后调用Update()
以将更改保存到数据库。
答案 1 :(得分:3)
检查CommandBuilder
是否真的为您发出了Update
命令,如下所示:
MessageBox.Show(adapter.UpdateCommand.CommandText);
如果缺少主键信息,则根本不会构建更新命令!
答案 2 :(得分:0)
我有点混淆你的SqlDataAdapter名称是适配器,你在employees_adapter中进行更新。使用SqlDataAdapter的步骤非常简单,只需按照这些步骤进行操作
第一步:
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);
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
adapter.delete(result);
adapter.Update(employees_table);
同样明智的你可以应用更新。但是在做任何更改之后必须调用'adapter.Update(employees_table)'