【问题标题】:SqlHierarchyID casting from Datarow来自 Datarow 的 SqlHierarchyID 强制转换
【发布时间】: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


【解决方案1】:

我遇到了同样的问题。原来我添加了错误的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

【讨论】:

  • 基本上,Microsoft.SqlServer.Types 版本 10 应该用于 SQL Server 2008。但是 Microsoft,SqlServer.Types edge 应该用于 SQL Server 2008 R2 及更高版本(即 2012、2014 等)。
【解决方案2】:

如何使用

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

我还看到你正在处理一棵树,所以这个代码项目article 可以帮助你

【讨论】:

  • 如果他有“NodeString”但不能解决原始问题,这将起作用。在他的示例中,“TreeID”实际上是一个 SqlHierarchyId,但看起来 SQL 服务器的 Types DLL 版本与他在项目中引用的版本不同。我目前也有同样的问题。
猜你喜欢
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多