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