我正在使用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?任何想法都表示赞赏!
答案 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一切正常。