有效的SQLGeometry对象在运行STNumGeometries()时导致“无效”异常

时间:2013-08-14 14:04:08

标签: c# sql-server sqlgeometry

我正在使用一个包含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();

这很有效。

0 个答案:

没有答案