Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update requires a valid InsertCommand when passed DataRow collection with new rows

Tags:

c#

database

I am trying to add a new row to my database . Here is my code :

ds1 is my Dataset , da1 is my data adapter

        dRow = ds1.Tables["localitati"].NewRow();
        dRow[1] = aux1.Replace(" ", "").Replace("-", "").ToLower();
        dRow[2] = aux2.ToLower().Replace(" ", "");
        dRow[3] = aux1;
        dRow[4] = e.X;
        dRow[5] = e.Y;
        ds1.Tables["localitati"].Rows.Add(dRow);

        da1.Update(ds1, "localitati");

at the da1.update(ds1,"localitati"); the program stops and gives me the error : "Update requires a valid InsertCommand when passed DataRow collection with new rows."

The connection to the database works ( i have retrieved info from the db )

Any ideas ?

like image 899
Alex Avatar asked Nov 05 '10 11:11

Alex


3 Answers

For adding DataRows:

SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

// add rows to dataset

builder.GetInsertCommand();

//Without the SqlCommandBuilder this line would fail
adapter.Update(dataSet);

Explanation:

adapter.Update(dataset) will try to save the changes in the dataset to the database. It will need:

  1. InsertCommand (if DataRows were added)
  2. DeleteCommand (if DataRows were deleted)
  3. UpdateCommand (if DataRows were modified)

You can put a breakpoint to inspect your adapter.InsertCommand before the adapter.Update() line to see if it is set.

To set them, simply create a SqlCommandBuilder and fire GetInsertCommand(), GetDeleteCommand(), etc.

This should solve the errors:

  1. "Update requires a valid Update Command when passed DataRow collection with modified rows." Or
  2. "Update requires a valid Insert Command when passed DataRow collection with new rows.", etc.

See MSDN Link for More Info

like image 192
Ali Saeed Avatar answered Sep 28 '22 06:09

Ali Saeed


Quesion Solved;Your question:

dRow = ds1.Tables["localitati"].NewRow();
dRow[1] = aux1.Replace(" ", "").Replace("-", "").ToLower();
dRow[2] = aux2.ToLower().Replace(" ", "");
dRow[3] = aux1;
dRow[4] = e.X;
dRow[5] = e.Y;
ds1.Tables["localitati"].Rows.Add(dRow);

da1.Update(ds1, "localitati");

Answer:

you must use commandBuilder. That is before your update using dataAdapter (or before you creating dataRow) Add the code:

SqlCommandBuilder cmdb = new SqlCommandBuilder(da);
like image 27
Jeevanandan J Avatar answered Sep 28 '22 05:09

Jeevanandan J


You must define an InsertCommand for you DataAdapter

http://www.codeproject.com/KB/database/relationaladonet.aspx

like image 31
Alex Avatar answered Sep 28 '22 06:09

Alex