3

我正在使用 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 的上下文 'Default' 中.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 的上下文'Default'中.0.0__89845dcd8080cc91\Microsoft.SqlServer.Types.dll'。

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

4

2 回答 2

6

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

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

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

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

截至撰写本文时正确。

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

于 2014-08-24T17:38:02.433 回答
1

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

于 2014-07-30T19:35:20.770 回答