2012-08-06 35 views
0

我想從我的SQL Server 2012數據庫檢索數據的地理與:其中確定的項目是一個無效的格式 - Microsoft.SqlServer.Type

new SqlDataAdapter("SELECT [SpatialColumn] FROM [SpatialTable]", myConnection).Fill(myDatatable); 

當數據是SQL Server 2008地理類型如Polygon,這一切都工作正常。但是,當類型是新CurvePolygon那麼該行代碼與錯誤崩潰:

System.FormatException occurred 
Message="One of the identified items was in an invalid format." 
Source="Microsoft.SqlServer.Types" 
StackTrace: at Microsoft.SqlServer.Types.GeoData.Read(BinaryReader r) 

在這種MSDN article,在名爲SQL CLR數據類型的部分,我已閱讀,當你引用的SQLType集版本11.0,並且還安裝了10.0版,您可能會看到類似的錯誤。所以我按照說明改變了我的配置文件。但它並沒有解決我的問題。

任何想法非常感謝!

回答

1

我有同樣的問題。它在SQL Server 2012中運行良好,但在SQL Server 2008中運行良好。我不得不使用Geography數據,使用SqlDataReader.GetSqlBytes,然後反序列化。

var geo = SqlGeography.Deserialize(dr.GetSqlBytes(0))

+0

感謝您花時間回答!不幸的是,在我甚至可以獲得一個DataReader或填充我的DataTable之前,崩潰就發生了。它在'填充'期間崩潰 – Johann 2012-11-22 08:29:18

+0

你真的嘗試過使用普通的香草閱讀器而不是適配器嗎? – Daniel 2012-11-22 13:57:53

0

如果您不需要SQLGEOGRAPHY對象嘗試轉換的SQLTYPE在DB爲文本。

new SqlDataAdapter("SELECT SpatialColumn.STAsText() FROM [SpatialTable]", myConnection).Fill(myDatatable); 

現在您的數據應該通過格式;

"POLYGON((-123.22,102.32...." 

"CURVEPOLYGON((-123.22,102.32...." 

由於兩種類型可表現爲文本,這將填補成功的列在你的數據表。

2

你可以嘗試以下綁定重定向:

<assemblyBinding> 
     <!--....--> 
    <dependentAssembly> 
      <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" /> 
      <bindingRedirect oldVersion="10.0.0.0-11.0.0.0" newVersion="11.0.0.0" /> 
      </dependentAssembly> 
     </assemblyBinding> 

它看起來像有與載荷組件的一個問題。更多信息:http://blog.devart.com/adventures-of-clr-types-in-net-framework.html

相關問題