У ADO.NET API есть некоторые проблемы, когда дело касается обработки типов значений, допускающих значение NULL (т.е. он просто не работает правильно). У нас не было никаких проблем с этим, и мы пришли к выводу, что лучше всего вручную установить значение на ноль, например,
myNewRow.myGuidColumn = myGuid == null ? (object)DBNull.Value : myGuid.Value
Это тяжелая дополнительная работа, которую ADO.NET должен выполнить, но, похоже, он не делает это надежно (даже в 3.5 SP1). По крайней мере, это работает правильно.
Мы также сталкивались с проблемами при передаче типов значений, допускающих значение NULL, в SqlParameters, где сгенерированный SQL включает ключевое слово DEFAULT
вместо NULL
для значения, поэтому я рекомендую такой же подход при построении параметров.