sta*_*ica 11 spatial backwards-compatibility sql-server-2008 sql-server-2012 sqlgeometry
如果我在本地安装了SQL Server 2008和SQL Server 2012,我只想亲自尝试一下; 但是我只安装了新版本,并希望保持这种方式.
Microsoft.SqlServer.Types.dll,主要版本10.Microsoft.SqlServer.Types.dll,主要版本为11.除其他外,两个程序集都暴露了一种SqlGeometryBuilder类型.两个程序集版本之间的一个显着区别是2012类型有一个额外的重载方法AddCircularArc,而2008类型没有.
因为并行引用这两个程序集并不是一件容易的事(也许是一个坏主意),我想知道我是否可以使用2012版本 - 即使是针对SQL Server 2008实例,只要我不使用它AddCircularArc.
任何人都可以分享他们的经验吗?
blu*_*ing 21
默认情况下,SqlClient使用Microsoft.SqlServer.Types程序集的10.0版(即使您在项目中引用了较新的版本).当同时加载该程序集的两个不同版本时,您可能会看到奇怪的运行时异常,例如"System.InvalidCastException:无法将类型为'Microsoft.SqlServer.Types.SqlGeometry'的对象强制转换为'Microsoft.SqlServer.Types.SqlGeometry' "."......
下面的文章描述了必须使用较新的Microsoft.SqlServer.Types程序集与SqlClient的一些可能性:SQL Server 2012中对数据库引擎功能的重大 更改
选项是:
我个人赞成"Type System Version"连接字符串关键字.请参阅此处的MSDN文章: SqlConnection.ConnectionString属性并搜索"Type System Version".
我尝试过使用SQL Server 2012来Microsoft.SqlServer.Types.dll对抗SQL Server 2008 Express.
可以INSERT编辑几何图形,只要它们不包含圆形字符串; 如果它们确实包含SQL Server 2008不支持的循环字符串,则抛出此异常:
System.Data.SqlClient.SqlException:传入的表格数据流(TDS)协议流不正确.参数1(@geometry):提供的值不是数据类型几何的有效实例.检查源数据中的无效值.
可以SELECT编辑几何图形,但显然只能通过已知文本(WKT):
// SELECT [Geometry].STAsText() FROM …
var geometry = SqlGeometry.STGeomFromText(sqlDataReader.GetSqlChars(…), …);
Run Code Online (Sandbox Code Playgroud)
如果有人试图直接读取几何体:
// SELECT [Geometry] FROM …
var geometry = (SqlGeometry)sqlDataReader[…];
Run Code Online (Sandbox Code Playgroud)
然后抛出以下异常(即使几何中没有圆形字符串):
System.InvalidCastException:[A]Microsoft.SqlServer.Types.SqlGeometry不能转为[B]Microsoft.SqlServer.Types.SqlGeometry.
- A型起源于
Microsoft.SqlServer.Types, Version=10.......- B型起源于
Microsoft.SqlServer.Types, Version=11.......
(Microsoft.SqlServer.Types.dll使用版本10 时不会抛出该异常.)