C# 处理SQL Server 2012表中的空间数据类型
一些背景: 我正在两个不同的虚拟机上运行两个不同的SQL Server安装。我正试图从我的代码(为SQLServer2008R2编写)连接到它们。我目前的.NET framework版本是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似乎无法将其转换为可用的内容,并引发异常。我感到欣慰的是,我没有做过什么,但我也感到困惑,因为这段代码应该可以普遍工作。请记住,此代码在SQLServer2008R2上完美地运行(因为它缺少空间数据类型) 我可以想出100个糟糕的方法来处理这个问题。不过我想找你们谈谈该怎么做。将.NET升级到4.5会解决这个问题吗?我是否必须更改代码以适应新的数据类型?如果我的应用程序不处理空间数据类型,我应该担心它们吗?我该如何处理这个问题,因为显然SqlClient和Type.GetType在这方面做得不好C# 处理SQL Server 2012表中的空间数据类型,c#,sql-server,sql-server-2012,sqldatatypes,sqlclient,C#,Sql Server,Sql Server 2012,Sqldatatypes,Sqlclient,一些背景: 我正在两个不同的虚拟机上运行两个不同的SQL Server安装。我正试图从我的代码(为SQLServer2008R2编写)连接到它们。我目前的.NET framework版本是4.0。我的Microsoft SQL Server 2008 R2安装正在运行专为其设计的AdventureWorks,我的SQL Server 2012 Express安装正在运行较新的AdventureWorks2012数据库。我正在查询Person.Address 目前我遇到一个异常,说“数据类型不能为
谢谢大家! 如果您使用的是2012和2008 R2,我建议您强制使用SQL 2012 SqlGeography类型
您可以考虑添加程序集重定向,因此试图加载2008 R2 SQLGeRoGrand的任何.NET代码都被视为SQL 2012 SQLGead。SQL库在序列化时通常是向后兼容的(只要有可能,即在不使用SQL 2012特定功能时,如CurvePolygon)
假设您使用的是LINQ to SQL,这可能与@Pondlife重复-错误消息不匹配。此外,提议的副本正在处理一个非常具体的案例,即将地理信息转换为varbinary。我不认为会发生这种情况。这就是为什么它是“可能的”重复:)但另一方面,基本问题似乎是您的.NET 4.0代码不支持SqlGeography,这也是另一个问题中描述的基本问题
<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>