我正在使用一个包含Geometry列的SQL Server 2008数据库,而且我现在在CSharp中加载和操作该数据时遇到问题,这在之前没有问题。
我有一个Microsoft.SqlServer.Types.SqlGeometry类型的对象,我需要获取STNumGeometries,即:
var numberOfGeometries = tmpDelytas[i].Delyta.DelytaGrans.STNumGeometries();
但它导致错误:
ArgumentException 24144:由于实例无效,无法完成此操作。使用MakeValid将实例转换为有效的实例。请注意,MakeValid可能会导致几何实例的点稍微移动。
我检查了SQLServer和STIsValid中的Geometry值,报告该值是有效的。 (因为代码以前的工作并不令人惊讶)。
几何在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();
这很有效。