OleDbDataAdapter, DataTable, пустая строка и ошибка Cannot insert the value NULL

В .Net существует очень простой способ вносить изменения в базу из таблицы, загруженной в DataGridView - использовать методы OleDbDataAdapter вроде Update. К сожалению, как и все коробочные решения данным способ построен по принципу "шаг вправо, шаг влево - расстрел". Если мы в базе для строковых полей вместо null храним значение по умолчанию в виде пустой строки not null default '', автоматическая связка из OleDbDataAdapter и DataTable в принципе не способна обработать такую комбинацию - так как вне зависимости от параметра DataColumn.DefaultValue (он работает только при добавлении новых строк) соответствующей колонки, при удалении всех данных в ячейке все равно окажется значение DBNull, которое DataAdapter и попытается записать в базу закономерно вылетев с ошибкой Cannot insert the value NULL ... column does not allow nulls.

Нормального выхода из этой ситуации нет, можно только вручную заменить все значения DBNull в Datatable на пустую строку

foreach (DataRow currRow in _someTable.Rows)
{
    if (currRow["STRING_COLUMN1"] == DBNull.Value) { currRow["STRING_COLUMN1"] = ""; }
    if (currRow["STRING_COLUMN2"] == DBNull.Value) { currRow["STRING_COLUMN2"] = ""; }
}

или таки написать собственную функцию обновления таблицы в обход DataAdapter

save Datatable values as empty string instead of null


Комментарии

OleDbDataAdapter, DataTable, пустая строка и ошибка Cannot insert the value NULL — 1 комментарий

  1. Epah raisparta os adeptos do SLB sempre a querem criticar o fernandez ou o menezes... No jogo de hoje estou curioso por ver também o Cornejo... oi? não está convocado? bolas, e eu a pensar que no SLB só se apostava em estrangeiros se realmente trouxessem um incremento de quç.dadeiAbraalo

Добавить комментарий для Deena Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>