1

SQl Server 2012 DB から地理データを取得しようとしています:

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 記事のSQL CLR データ型と呼ばれるセクションで、SqlTypes アセンブリ バージョン 11.0 を参照し、バージョン 10.0 もインストールされている場合、同様のエラーが表示される場合があることを読みました。そのため、説明どおりに構成ファイルを変更しました。しかし、それは私の問題を解決していません。

どんなアイデアでも大歓迎です!

4

3 に答える 3

1

同じ問題がありました。SQL-Server 2012 では正常に機能しましたが、SQL-Server 2008 では機能しませんでした。使用してから逆シリアル化して、Geographyデータを消費する必要がありました。SqlDataReader.GetSqlBytes

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

于 2012-11-21T12:51:26.990 に答える
0

SQLGEOGRAPHY オブジェクトが必要ない場合は、DB で SQLType をテキストに変換してみてください。

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

これで、データがフォーマットで送信されるはずです。

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

また

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

どちらのタイプも、DataTable の列を正常に埋める Text として表現できます。

于 2014-03-20T19:36:10.670 に答える