我正在使用一个包含几何列的 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();
这有效。