Для обновления требуется действительная InsertCommand при передаче коллекции DataRow с новыми строками

Я пытаюсь добавить новую строку в свою базу данных. Вот мой код:

ds1 - мой набор данных, da1 - мой адаптер данных

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

в da1.update(ds1,"localitati"); программа останавливается и дает мне ошибку: "Update requires a valid InsertCommand when passed DataRow collection with new rows."

Соединение с базой данных работает (я получил информацию из db)

Любые идеи?

Ответ 2

Quesion Solved, ваш вопрос:

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

Ответ:

вы должны использовать commandBuilder. Это до вашего обновления с использованием dataAdapter (или до создания dataRow). Добавьте код:

SqlCommandBuilder cmdb = new SqlCommandBuilder(da);

Ответ 3

Для добавления DataRows:

SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

// add rows to dataset

builder.GetInsertCommand();

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

Пояснение:

adapter.Update(dataset) попытается сохранить изменения в dataset в базе данных. Это потребует:

  • InsertCommand (если добавлен DataRows)
  • DeleteCommand (если DataRows были удалены)
  • UpdateCommand (если DataRows были изменены)

Вы можете поместить контрольную точку для проверки вашего adapter.InsertCommand до строки adapter.Update(), чтобы увидеть, установлен ли он.

Чтобы установить их, просто создайте SqlCommandBuilder и огонь GetInsertCommand(), GetDeleteCommand() и т.д.

Это должно решить ошибки:

  • "Обновление требует действительной команды обновления при передаче коллекции DataRow с измененными строками". Или
  • "Обновление требует действительной команды" Вставить "при передаче коллекции DataRow с новыми строками" и т.д.

Подробнее см. Ссылка MSDN для получения дополнительной информации