Как я могу обновить только те поля, которые изменились? - PullRequest
3 голосов
/ 23 февраля 2009

У меня есть набор данных, в котором я создаю новую строку в таблице данных и заполняю 1 или 2 поля. Они не могут быть одинаковыми каждый раз.

Когда я выполняю dataset.update (), все поля, кажется, записываются обратно. В моей базе данных заданы значения по умолчанию, которые не запускаются.

Есть ли способ заставить набор данных вставлять только те значения, которые я изменил вручную, что позволяет базе данных "заполнять значения по умолчанию для других полей"?

Мне также нужно, чтобы набор данных генерировал оператор вставки.

Ответы [ 3 ]

1 голос
/ 23 февраля 2009

Вы не сможете заставить конструктор сгенерировать оператор вставки (или адаптер данных сгенерирует его во время выполнения) и выборочно выбирать поля для установки.

Хотя DataSet имеет мониторинг изменений, он находится на уровне строк, а не на уровне столбцов. По этой причине вам придется отслеживать, какие столбцы установлены при внесении изменений.

Если столбцы, которые будут изменены, согласованы, то я бы вручную создал запрос в конструкторе, чтобы вставить только эти значения.

В противном случае вам придется самостоятельно отслеживать, какие столбцы меняются. Если таблица в базе данных не имеет столбцов, которые допускают нулевые значения, вы можете разрешить столбцам в наборе данных иметь нулевые значения и установить для них значения по умолчанию. Затем, если столбец не имеет нулевого значения, вы знаете, что оно было изменено.

Если он допускает нулевое значение, вам нужно будет сохранить внешний от DataSet флаг, указывающий, было ли задано значение для столбца (это будет сделано при изменении столбца).

ПРИМЕЧАНИЕ. Когда я говорю, что в DataSets нет мониторинга изменений, я имею в виду, что вызов GetChanges для DataSet / DataTable не скажет, какой столбец изменился, какие строки. Вызов GetChanges - это то, что DataAdapter будет использовать для определения того, что отправлять на сервер, но он не будет знать, какие столбцы отправлять, поэтому он отправляет их все.

0 голосов
/ 23 февраля 2009

вы можете установить значение по умолчанию вручную, набрав

Column.DefaultValue = defaultValue;

для генерации оператора вставки вы можете использовать класс CommandBuilder

новый SqlCeCommandBuilder (dAdapter);

0 голосов
/ 23 февраля 2009

Попробуйте использовать набор типизированных данных или метод адаптера. FillSchema.

Обновление 1 Хотя при этом будут отправляться дополнительные значения, при вставке будут эффективно использоваться значения по умолчанию для базы данных.

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