从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目录
我也遇到了同样的问题。原来,我添加了一个链接到错误的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"]);
我还看到您正在使用树,所以希望这篇代码项目文章将帮助您