我正在使用 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/