2

我正在尝试从已从 SQL Server 数据库获取的 DataRow 中检索 C# 中的 SqlHierarchyID 数据类型。在数据库调用之后,如果我写以下内容:

var id = datarow["TreeID"];

然后在 Visual Studio 中使用手表检查 id 的值,它持有正确的层次结构值(并且非空)。

但是,以下所有情况都会引发 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

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

4

2 回答 2

2

我有同样的问题。原来我添加了错误的Microsoft.SqlServer.Types.dll的链接。对于 MS SQL 2008,它位于 C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies 对于 MS SQL 2012 在 C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Assemblies 中

于 2013-12-20T15:05:20.510 回答
1

怎么用

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

我还看到您正在使用一棵树,所以这篇代码项目文章可能会对您有所帮助

于 2013-03-12T01:59:45.333 回答