Я пытаюсь получить тип данных SqlHierarchyID в C# из DataRow, который был получен из базы данных SQL Server. После вызова базы данных, если я пишу следующее:Листинг SqlHierarchyID от Datarow
var id = datarow["TreeID"];
А затем проверьте значение идентификатора, используя часы в визуальной студии, он держит правильное значение иерархии (и не равен нулю).
Однако любые из следующих бросить InvalidCastException:
SqlHierarchyId id2 = (SqlHierarchyId) id;
SqlHierarchyId id3 = datarow.Field<SqlHierarchyId>("TreeID");
SqlHierarchyId id4 = (SqlHierarchyId)datarow["TreeID"];
Кроме того, спрашивая отражения для Назначают-способности, из двух объектов:
//returns false:
SqlHierarchyId id5 = new SqlHierarchyId();
return id5.GetType().IsAssignableFrom(id.GetType());
Кроме того, пробуя " мягкий слепок»возвращает нуль:
SqlHierarchyId id6 = id as SqlHierarchyId;
- Пробовал все как SqlHierarchyId? тип данных бесплоден.
- Я ссылаюсь на 32-битную сборку и попытался выполнить компиляцию моего решения в режимах 64 и 32 бит.
- Инициализация пустого экземпляра SqlHierarchyId и последующее его назначение не помогают.
Спасибо за любую помощь!
-JT
EDIT: сборка поставляется с SQL Server Express каталог 2012 (x86) SDK.
Что делает 'datarow [" TreeID "]. GetType()' return? –
@Tim Он возвращает "{Name =" SqlHierarchyId "FullName =" Microsoft.SqlServer.Types.SqlHierarchyId "}" –
Почти похоже на две разные версии этого типа. Если вы сравниваете Type из DataRow с 'typeof (SqlHierarchyId)', то они идентичны? Я не уверен, какие свойства проверяемого типа (возможно, «GUID»?) –