c# - 从 Datarow 转换 SqlHierarchyID

标签 c# sql-server sqlclr hierarchyid

我正在尝试从从 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/

相关文章:

c# - 在父表达式中重用表达式结果

c# - WiFi信号强度功能出现编译错误

sql - 将 SQL Server 兼容模式从 90 更改为 100 时有哪些差异和问题?

sql-server - 使用正则表达式(或类似的)更新字段

sql-server - 如何从 SQL CLR 函数打印消息?

c# - 使用 docker-compose 使用 dotnet 核心的 MongoDB 连接超时

c# - 正则表达式 '\b' 的 T-SQL 等效项

c# - 我应该从 SQL CLR 函数中使用 EF6

c# - 使用 .net framework 4.0 在 sql server 2008 中创建的 dll 创建 CLR 存储过程。显示错误

c# - 如何编写 LINQ 查询来获取过去 7 天内的内容?