我正在尝试从从 SQL Server 数据库获取的 DataRow 中检索 C# 中的 SqlHierarchyID 数据类型。数据库调用后,如果我写以下内容:
var id = datarow["TreeID"];
然后使用 Visual Studio 中的 watch 检查 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 目录。
最佳答案
我也遇到了同样的问题。结果发现我添加了一个指向错误的 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
关于c# - 从 Datarow 转换 SqlHierarchyID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15351009/