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

时间:2014-07-22 21:19:15

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

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

当我尝试:

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

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

  

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

     

其他信息:[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 \组件\ 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 \组件\ GAC_MSIL \ Microsoft.SqlServer.Types \ 11.0.0.0__89845dcd8080cc91 \ Microsoft.SqlServer.Types.dll'

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

2 个答案:

答案 0 :(得分:6)

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

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

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

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

截至撰写时间正确。

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

答案 1 :(得分:1)

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