Для обновления требуется допустимая команда InsertCommand при передаче коллекции DataRow с новыми строками - PullRequest
10 голосов
/ 05 ноября 2010

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

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."

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

Есть идеи?

Ответы [ 3 ]

10 голосов
/ 31 декабря 2013

Для добавления 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 в базе данных. Для этого потребуется:

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

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

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

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

  1. «Для обновления требуется действительная команда обновления при передаче коллекции DataRow с измененными строками». Или
  2. «Для обновления требуется допустимая команда вставки при передаче коллекции DataRow с новыми строками.» И т. Д.

См. MSDN Link для получения дополнительной информации

7 голосов
/ 12 декабря 2012

Вопрос решен; Ваш вопрос:

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);
6 голосов
/ 05 ноября 2010

Вы должны определить InsertCommand для вас DataAdapter

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...