【发布时间】:2013-03-12 00:10:25
【问题描述】:
我正在尝试从已从 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 目录。
【问题讨论】:
-
datarow["TreeID"].GetType()返回什么? -
@Tim 它返回"{Name = "SqlHierarchyId" FullName = "Microsoft.SqlServer.Types.SqlHierarchyId"}"
-
几乎听起来有两种不同版本的类型。如果将 DataRow 中的 Type 与
typeof( SqlHierarchyId )进行比较,它们是否相同?我不确定要检查的类型的哪些属性(可能是GUID?) -
另外,您是使用新的 SQL 2012 程序集检索数据,还是仅使用 System.Data.Sql 命名空间中的类?
-
如果下面的帖子满足您的需求,您能否将其标记为答案?谢谢
标签: c# sql-server sqlclr hierarchyid