簡體   English   中英

從DataReader檢索SqlGeography類型時如何解決InvalidCastException?

[英]How to resolve an InvalidCastException when retrieving a SqlGeography type from a DataReader?

我正在使用Visual Studio 2013和SQL Server 2012在C#中開發。我已經能夠使用T-SQL在地理列中存儲多邊形,並且我沒有嘗試在代碼中使用SqlGeography類來檢索數據。

當我嘗試:

SqlGeography polyB = (SqlGeography)dr["extent"]; // stored in OGC Well Known Binary format

從數據庫中檢索多邊形我收到的消息:

GeoLib.dll中發生了未處理的“System.InvalidCastException”類型異常

附加信息:[A] Microsoft.SqlServer.Types.SqlGeography無法強制轉換為[B] Microsoft.SqlServer.Types.SqlGeography。 類型A源自'Microsoft.SqlServer.Types,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91',位於'默認'位置'C:\\ Windows \\ assembly \\ GAC_MSIL \\ Microsoft.SqlServer.Types \\ 10.0 .0.0__89845dcd8080cc91 \\ Microsoft.SqlServer.Types.dll”。

類型B源自'Microsoft.SqlServer.Types,Version = 11.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91',位於'默認'位置'C:\\ Windows \\ assembly \\ GAC_MSIL \\ Microsoft.SqlServer.Types \\ 11.0 .0.0__89845dcd8080cc91 \\ Microsoft.SqlServer.Types.dll”。

我懷疑SQL Server和Visual Studio之間的版本不兼容,如不同的版本號所示。 有沒有人碰到這個? 也許我需要安裝SQL Server 2014? 任何想法都表示贊賞!

雖然你自己的答案清楚地解決了你的問題(這很好),但通過做你所擁有的,你已經強迫自己只能在SQL 2012以后才能訪問幾何和地理可用的一些方法。

以下鏈接解釋了解決此問題的一些更好的方法,請參閱SQL Server 2012中對數據庫引擎功能的重大更改

您將在頁面下方找到關於三分之一的相關信息,分為“ SQL CLR數據類型(幾何,地理和等級ID) ”。 我選擇的方法是在app.config中重定向程序集 - 但如果您願意/需要,可以使用其他程序。

請注意,SQL Server 2014需要相同的解決方案,但與指定Microsoft.SqlServer.Types程序集的版本12不兼容,也不能將“Sql Server 2014”指定為連接字符串的Type System Version參數 - 使用2012。

寫作時間正確。

為遲到的答案道歉,希望它有所幫助。

事實證明我使用的是版本11(我懷疑是Visual Studio 2013)而不是SQL Server 2012必須使用的版本10。 當我將項目引用更改為版本10.dll一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM