sql-server-2008 - Microsoft.SqlServer.Types 的几何 UDT 的 SQL Server 2012 版本是否向后兼容 SQL Server 2008?

标签 sql-server-2008 sql-server-2012 spatial backwards-compatibility sqlgeometry

如果我在本地安装了 SQL Server 2008 和 SQL Server 2012,我会自己尝试一下;但是我只安装了较新的版本,并希望保持这种状态。

  • SQL Server 2008 自带程序集 Microsoft.SqlServer.Types.dll , 主要版本 10。
  • SQL Server 2012 自带程序集 Microsoft.SqlServer.Types.dll , 主要版本 11。

  • 除其他外,这两个程序集都公开了一个 SqlGeometryBuilder type .两个汇编版本之间的一个显着区别是 2012 类型有一个额外的重载方法 AddCircularArc ,而 2008 类型则没有。

    it's not exactly trivial (and perhaps a bad idea) to reference both assemblies in parallel ,我想知道我是否可以只使用 2012 版本——即使是针对 SQL Server 2008 实例,只要我不使用 AddCircularArc .

    如果他们尝试过这个,任何人都可以分享他们的经验吗?

    最佳答案

    默认情况下,SqlClient 使用 Microsoft.SqlServer.Types 程序集的 10.0 版(即使您在项目中引用了较新的版本)。当该程序集的两个不同版本同时加载时,您可能会看到奇怪的运行时异常,例如“System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry' '."...

    以下文章描述了必须将较新的 Microsoft.SqlServer.Types 程序集与 SqlClient 一起使用的一些可能性:
    Breaking Changes to Database Engine Features in SQL Server 2012

    选项是:

  • 调用 GetSqlBytes 方法,而不是 Get 方法(例如 SqlGeometry.Deserialize(reader.GetSqlBytes(0)))
  • 在应用程序配置中使用程序集重定向
  • 为“类型系统版本”属性指定值“SQL Server 2012”以强制 SqlClient 加载程序集的 11.0 版

  • 我个人喜欢“类型系统版本”连接字符串关键字。请参阅此处的 MSDN 文章:
    SqlConnection.ConnectionString Property并搜索“类型系统版本”。

    关于sql-server-2008 - Microsoft.SqlServer.Types 的几何 UDT 的 SQL Server 2012 版本是否向后兼容 SQL Server 2008?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14675774/

    相关文章:

    sql-server - 如何为带有 VARBINARY(MAX) 字段的表生成 INSERT 脚本?

    database - 在 DB 中表示文件系统(在 SQL Server 2008 中使用 hierarchyid)

    c++ - 如何使用 C++ 获取 SQL 数据库的总大小

    windows-8 - 在 Windows 8 App 中连接 SQL Server 数据库?

    sql-server - 如何删除字符串列上的空格

    linq - POINT 内的 EntityFramework 和空间搜索 POINT

    sql-server-2008 - 匹配一个或零个字符的通配符

    datetime - 从 SQL Server 2012 中的 WeekDay 整数获取 WeekDay 名称

    r - 在R中,如何平均空间网格正方形上的空间点数据

    c - 用于非均匀大小超球体中最近邻搜索的快速空间数据结构