c# - 从 DataReader 检索 SqlGeography 类型时如何解决 InvalidCastException?

标签 c# sql-server sql-server-2012 sqlgeography

我正在使用 Visual Studio 2013 和 SQL Server 2012 在 C# 中进行开发。我已经能够使用 T-SQL 在地理列中存储多边形,并且我没有尝试在代码中使用 SqlGeography 类来检索数据。

当我尝试时:

SqlGeography polyB = (SqlGeography)dr["extent"]; // stored in OGC Well Known Binary format

从我收到消息的数据库中检索多边形:

An unhandled exception of type 'System.InvalidCastException' occurred in GeoLib.dll

Additional information: [A]Microsoft.SqlServer.Types.SqlGeography cannot be cast to [B]Microsoft.SqlServer.Types.SqlGeography. Type A originates from 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' in the context 'Default' at location 'C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Types\10.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Types.dll'.

Type B originates from 'Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' in the context 'Default' at location 'C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Types\11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Types.dll'.

我怀疑 SQL Server 和 Visual Studio 之间的版本不兼容,正如版本号不同所表明的那样。有没有人遇到过这个?也许我需要安装 SQL Server 2014?任何想法表示赞赏!

最佳答案

虽然您自己的答案清楚地解决了您的问题(这很好),但通过做您所拥有的,您已经迫使自己无法访问仅在 SQL 2012 及更高版本中可用于几何和地理的一些方法。

以下链接解释了一些解决此问题的更好方法,请参阅 Breaking Changes to Database Engine Features in SQL Server 2012

您会在页面下方三分之一处找到相关信息,副标题为“SQL CLR 数据类型(几何、地理和层次结构 ID)”。我选择的方法是在 app.config 中重定向程序集 - 但如果您愿意/需要,可以使用其他方法之一。

请注意,SQL Server 2014 需要相同的解决方案,但尚不兼容 Microsoft.SqlServer.Types 程序集的指定版本 12,您也不能将“Sql Server 2014”指定为您的类型系统版本参数连接字符串 - 使用 2012。

截至撰写本文时正确无误。

很抱歉回答晚了,希望对您有所帮助。

关于c# - 从 DataReader 检索 SqlGeography 类型时如何解决 InvalidCastException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24898039/

相关文章:

c# - XDocument后代

sql - 是否可以告诉 SSMS 不检查 t-sql 脚本中是否存在列?

sql - Order By [...] OFFSET [..] FETCH [...] 子句中的 fetch Next 和 fetch First 有什么区别?

sql-server - 直接使用 PowerShell 与 SQL Agent PowerShell 作业步骤

c# - 数据绑定(bind)不包含具有名称的属性

c# - 向自定义 WPF 控件添加属性?

具有相同 ID 和最新日期的 SQL 连接行

c++ - 将数组绑定(bind)到sql参数

c# - 使用 HttpContext.Items 的开销有多大

c# - 我可以在我的开发机器上为 C# VS2010 项目使用哪种轻型 SQL Server 类型?