0

我正在使用一个包含几何列的 SQL Server 2008 数据库,我现在在 CSharp 中加载和操作该数据时遇到了问题,而以前没有问题。

我有一个 Microsoft.SqlServer.Types.SqlGeometry 类型的对象,我需要获取 STNumGeometry 即:

var numberOfGeometries = tmpDelytas[i].Delyta.DelytaGrans.STNumGeometries();

但这会导致错误:

ArgumentException 24144:此操作无法完成,因为实例无效。使用 MakeValid 将实例转换为有效实例。请注意,MakeValid 可能会导致几何实例的点稍微移动。

我检查了 SQLServer 和 STIValid 中的 Geometry 值,那里报告是有效的。(不足为奇,因为该代码以前有效)。

根据 CSharp 和 SQLServer 中的 STIValid,几何图形是有效的,并且 STNumGeometries 在数据库中工作,如果我在那里放置断点,则 STNumGeometries 的值在手表中报告为 1。但是,如果我向前一步,程序仍然会因此错误而崩溃。

为什么我的代码突然不愿意处理这行代码?

更新 我找到了一个“解决方案”,但仍然想了解这个问题,因为这很臭......

var geomText = tmpDelytas[0].Delyta.DelytaGrans.ToString();
var geom = SqlGeometry.STGeomFromText(new SqlChars(geomText),0);                            
var numberOfGeometries = geom.STNumGeometries();

这有效。

4

0 回答 0