1

У меня есть таблица в сервере SQL:Обработка нулевые идентификаторы GUID в SQL Server и строго типизированных наборов данных

Categories 
-------------- 
CategoryID (uniqueidentifier) 
ParentCategoryID (uniqueidentifier) allow nulls 

ParentCategoryID предназначен для хранения значения в CategoryID, чтобы указать, какая категория является родителем. Если у него нет родителя (т. Е. Это верхняя категория), то значение родительской категории должно быть нулевым.

Я использую строго типизированные наборы данных (адаптеры таблицы), а для свойств для ParentCategoryID он не может быть пустым. Я попытался изменить свойства для поля в типизированном наборе данных, но он говорит, что попытка заставить guid «empty» или «nothing» недействительна. Единственный вариант - исключить исключение из null. Это приводит к ошибке:

Значение для столбца «ParentCategoryID» в таблице «Категории» - это DBNull.

Это так, или есть способ обработки нулевых идентификаторов GUID/uniqueidentifiers при использовании типизированных наборов данных?

ответ

2

Если вы использовали генераторы Visual Studio и все определенно правильно для вашей таблицы, то обнуляемым столбец будет генерировать следующую на ваш строго типизированный DataRow:

  1. Публичное свойство с именем для имени столбца таблицы ("ParentCategoryID")
  2. общедоступный метод, который обнаруживает пустую запись ("Ий IsParentCategoryIDNull()")
  3. общедоступного метод, который "обнуляет" запись ("пустота SetParentCategoryIDNull()")

Учитывая, что ваш сильно типизированных таблица с именем «My» (Формирует MyDataTable и MyDataRow), ваш DataSet назван MyDataSetType, и экземпляр назван myDataSet:

MyDataSetType.MyRow row = myDataSet.My.NewMyRow(); 
row.ParentCategoryID = Guid.Empty; //OPTION 1: explicitly set GUID 
row.SetParentCategoryIDNull(); //OPTION 2: explicitly set Null 
myDataSet.My.AddMyRow(row); 

Вы также можете посмотреть на реализацию SetParentCategoryID в посмотрите, что используется для «обнуления».

Далее, чтобы обнаружить «нулевой GUID»:

if (row.IsParentCategoryIDNull()) 
{ 
    //Do something spectacular 
} 

Так что теперь у вас есть три различных типа значений для представления состояния:

  1. нулевой вход в базе данных/набора данных (без родительской категории)
  2. non-null запись в базе данных (родительская категория, предположительно)
  3. non-null запись в базе данных, которая является пустой (Guid.Empty) guid (???)

Когда я впервые столкнулся с этой проблемой, я подумал, что Guid.Empty должно было использоваться для представления нулевой записи в базе данных, но для этого потребовалась бы специальная обработка типа guid. Используя функции обертки, строго типизированный набор данных может обеспечить согласованную обработку любого числа столбцов с возможностью сбрасывания на основе типов типа структуры.

+0

спасибо. Вариант Guid.Empty работал для меня. Я попробовал параметр SetParentCategoryIDNull(), но он дал ту же ошибку. Guid.Empty вставляет указатель со всеми нулями. Я могу жить с этим.Моим другим вариантом было использование поля varchar вместо поля uniqueidentifier. – dtc