开发者

DataAdapter.Update() does not update data in DB

I've got an assignment which requires me to update the northwind database, I've done everything like the tutorials say as follows

I fill The DataTable Using The DataAdapter.Fill(table).

I build the Delete,Insert,Update Commands using 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);

I also set a primary key for the table:

DataColumn[] employees_keys = new DataColumn[2];
employees_keys[0] = employees.Columns["EmployeeID"];
employees_table.PrimaryKey = employees_keys; 

Now I've attempted to delete and add a row:

// 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);`

and deleting a row:

DataRow row = employees.Rows.Find(employeeToDismiss.ID);
employees.Rows.Remove(row); 

I should also point out that I've attempted to use row.SetAdded() and row.Delete()

Anyway, at the end when I try to update the database

int k = employees_adapter.Update(employees_table);

on added rows sometimes k ge开发者_如何学编程t valued, on remove never, and in either case nothing really gets updated at all in the database itself.

Any insight of what I'm doing wrong?


Make sure you're calling employee_table.AcceptChanges() after the call to Update() to save the changes to the database.


Check if the CommandBuilder really makes an Update command for you, like this:

MessageBox.Show(adapter.UpdateCommand.CommandText);

If the primary key info is missing it won't build the update command at all!


I am little confuse here your SqlDataAdapter name is adapter and you are doing updation in employees_adapter.The steps are so simple to work with SqlDataAdapter just follow theses

Step No 1:

    SqlDataAdapter adapter = new SqlDataAdapter(selectStr, conn);
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 
    DataTable employees_table= new DataTable ();
    adapter.Fill(employees_table);

Step No 2:

After you got the data in dataset start manipulation on it..

To insert :

 DataRow MyRow = employees_table.NewRow();
 //Now Fill data in MyRow
 employees_table.Tables[0].Rows.Add(MyRow);
 employees_table.AcceptChanges();
 adapter.Update(employees_table);

To Delete :

 /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);

Like wise you can apply updation..But after doing any changes must call
table.AcceptChanges() and then'adapter.Update(employees_table)'

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜