一些背景:
我在两个不同的VM上运行了两个不同的SQL Server安装。我正在尝试通过我的代码连接到它们(该代码为SQL Server 2008 R2编写)。我当前的.NET框架版本是4.0。我的Microsoft SQL Server 2008 R2安装正在运行为其设计的AdventureWorks,而我的SQL Server 2012 Express安装正在运行更新的AdventureWorks2012数据库。我正在查询person.address。
目前,我正在遇到一个例外,说"数据类型不能为null"。我从查看返回的模式中推断出该问题来自SQL Server 2012返回
microsoft.sqlserver.types.sqlgeography
数据类型。看来type.getType无法将其转换为可用的东西并引发异常。我很放心,这是我什么都没有做的,但是我也感到困惑,因为该代码应该普遍起作用。请记住,此代码在SQL Server 2008 R2上完美运行(因为它缺少空间数据类型)。
我可以想到100种不好的方法来处理这一问题。但是,我想来找大家做有关该怎么做的建议。升级.NET会升级到4.5补救情况吗?我是否必须更改代码以适应新的数据类型?如果我的应用程序不处理它们,我应该担心空间数据类型吗?我该如何处理,因为显然是sqlclient和type.getType在此方面做得不好。
谢谢!
如果您正在使用2012年和2008 R2,我建议您强制使用SQL 2012 SQLGeogemathy类型。
您可能会考虑添加汇编重定向,因此任何试图加载2008 R2 SQLEGEograph的任何.NET代码都被视为SQL 2012 SQLGeogementh。SQL库通常在序列化时向后兼容(尽可能,即SQL 2012不使用特定功能,例如CurvePolygon)。
<runtime>
<assemblyBinding>
<dependentAssembly>
<assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>