从Datarow中转换SqlHierarchyID

本文关键字:SqlHierarchyID 转换 Datarow | 更新日期: 2023-09-27 18:03:20

我试图在c#中检索SqlHierarchyID数据类型,从已从SQL Server数据库获取的DataRow。在数据库调用之后,如果我写如下代码:

var id = datarow["TreeID"];

然后在visual studio中使用watch检查id的值,它持有正确的层次结构值(并且是非null)。

但是,以下任何和所有的方法都会抛出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());

此外,尝试"软强制转换"返回null:

SqlHierarchyId id6 = id as SqlHierarchyId;
  • 尝试一切作为SqlHierarchyId?
  • 我引用32位组件,并尝试在64位和32位模式下编译我的解决方案。
  • 初始化一个空的SqlHierarchyId实例然后分配它没有帮助。

谢谢你的帮助!

jt

EDIT:程序集来自SQL Server Express 2012 (x86) SDK目录

从Datarow中转换SqlHierarchyID

我也遇到了同样的问题。原来,我添加了一个链接到错误的Microsoft.SqlServer.Types.dll。对于MS SQL 2008,它位于C:'Program Files (x86)'Microsoft SQL Server'100'SDK'Assemblies For MS SQL 2012 in C:'Program Files (x86)'Microsoft SQL Server'110'SDK'Assemblies

如何使用

//convert the string back into a hierarchyid
oRow["NodeKey"] = SqlHierarchyId.Parse((string)oRow["NodeString"]);

我还看到您正在使用树,所以希望这篇代码项目文章将帮助您