Geometry 列を含む SQL Server 2008 データベースを使用していますが、以前は問題がなかったのに、CSharp でそのデータを読み込んで操作する際に問題が発生しています。
Microsoft.SqlServer.Types.SqlGeometry タイプのオブジェクトがあり、STNumGeometry を取得する必要があります。
var numberOfGeometries = tmpDelytas[i].Delyta.DelytaGrans.STNumGeometries();
しかし、それはエラーを引き起こしています:
ArgumentException 24144: インスタンスが無効なため、この操作を完了できません。MakeValid を使用して、インスタンスを有効なインスタンスに変換します。MakeValid によって、ジオメトリ インスタンスのポイントがわずかにシフトする場合があることに注意してください。
SQLServer の Geometry 値を確認したところ、STIsValid が有効であることが報告されました。(コードは以前に機能していたので驚くことではありません)。
ジオメトリは、CSharp と SQLServer の両方で STIsValid に従って有効であり、STNumGeometries はデータベースで機能し、そこにブレークポイントを配置すると、STNumGeometries の値がウォッチで 1 として報告されます。しかし、前に進むと、プログラムはこのエラーでクラッシュします。
私のコードがコード行を処理することを突然望まなくなるのはなぜですか?
更新 「解決策」を見つけましたが、それでも問題を理解したいと思います...
var geomText = tmpDelytas[0].Delyta.DelytaGrans.ToString();
var geom = SqlGeometry.STGeomFromText(new SqlChars(geomText),0);
var numberOfGeometries = geom.STNumGeometries();
そして、これは機能します。