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 req开发者_开发问答uires 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 ?
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:
- InsertCommand (if
DataRows
were added) - DeleteCommand (if
DataRows
were deleted) - 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:
- "Update requires a valid Update Command when passed DataRow collection with modified rows." Or
- "Update requires a valid Insert Command when passed DataRow collection with new rows.", etc.
See MSDN Link for More Info
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);
You must define an InsertCommand for you DataAdapter
http://www.codeproject.com/KB/database/relationaladonet.aspx
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);
SqlCommandBuilder scb = new SqlCommandBuilder(da);//just add this line
da1.Update(ds1, "localitati");
精彩评论