繁体   English   中英

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

[英]How to resolve an InvalidCastException when retrieving a SqlGeography type from a DataReader?

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

当我尝试:

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

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

GeoLib.dll中发生了未处理的“System.InvalidCastException”类型异常

附加信息:[A] Microsoft.SqlServer.Types.SqlGeography无法强制转换为[B] Microsoft.SqlServer.Types.SqlGeography。 类型A源自'Microsoft.SqlServer.Types,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91',位于'默认'位置'C:\\ Windows \\ assembly \\ GAC_MSIL \\ Microsoft.SqlServer.Types \\ 10.0 .0.0__89845dcd8080cc91 \\ Microsoft.SqlServer.Types.dll”。

类型B源自'Microsoft.SqlServer.Types,Version = 11.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91',位于'默认'位置'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以后才能访问几何和地理可用的一些方法。

以下链接解释了解决此问题的一些更好的方法,请参阅SQL Server 2012中对数据库引擎功能的重大更改

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

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

写作时间正确。

为迟到的答案道歉,希望它有所帮助。

事实证明我使用的是版本11(我怀疑是Visual Studio 2013)而不是SQL Server 2012必须使用的版本10。 当我将项目引用更改为版本10.dll一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM