2012-10-31 95 views
1

一些背景:處理SQL Server 2012表中的空間數據類型

我在兩個不同的VM上運行兩個不同的SQL Server安裝。我試圖從我的代碼(它是爲SQL Server 2008 R2編寫的)連接到它們。我目前的.NET框架版本是4.0。我的Microsoft SQL Server 2008 R2安裝正在運行爲其設計的AdventureWorks,而我的SQL Server 2012 Express安裝正在運行較新的AdventureWorks2012數據庫。我正在查詢Person.Address。

目前我遇到了一個異常說「數據類型不能爲空」。我從看這個問題來自於SQL Server 2012中返回一個

Microsoft.SqlServer.Types.SqlGeography

數據類型返回的模式推出。看起來Type.GetType不能將其轉換爲可用並引發異常。我感到寬慰的是,這並不是我所做的,但我也感到困惑,因爲這個代碼應該普遍適用。請記住,此代碼在SQL Server 2008 R2上完美運行(因爲它缺少空間數據類型)。

我可以想出100個不好的方法來處理這個問題。不過,我想找你們提供建議。將.NET升級到4.5可以改善這種情況嗎?我是否必須更改我的代碼以適應新的數據類型?如果我的應用程序不處理它們,我應該擔心空間數據類型嗎?我該如何處理這個問題,因爲顯然SqlClient和Type.GetType在這方面做得不好。

謝謝!

+0

假設你正在使用LINQ to SQL,這是一個可能重複[是否有可能使用SqlGeography與LINQ to SQL的?](http://stackoverflow.com/questions/2845767/is-它 - 可能使用sqlgeography-with-linq-to-sql) – Pondlife

+0

@Pondlife - 錯誤消息不匹配。此外,擬議的副本正在處理一個非常具體的情況,將地理轉換爲varbinary。我在這裏看不到發生這種情況。 – JDB

+0

這就是爲什麼它是一個「可能的」重複:)但另一方面,基本問題似乎是您的.NET 4.0代碼不支持SqlGeography,這也是其他問題中描述的基本問題 – Pondlife

回答

0

如果您正在使用2012和2008 R2,我建議您強制使用SQL 2012 SqlGeography類型。

您可能會考慮添加程序集重定向,因此任何試圖加載2008 R2 SqlGeograph的.NET代碼都被視爲SQL 2012 SqlGeography。序列化時,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>