C# 有效的SQLGeometry对象导致;无效”;例外情况;在其上运行STNumGeometries()时
我使用的是一个SQL Server 2008数据库,其中包含一个几何列,我现在在CSharp中加载和操作这些数据时遇到了问题,而以前这些数据都不是问题 我有一个Microsoft.SqlServer.Types.SqlGeometry类型的对象,我需要获取STNumGeometries,即:C# 有效的SQLGeometry对象导致;无效”;例外情况;在其上运行STNumGeometries()时,c#,sql-server,sqlgeometry,C#,Sql Server,Sqlgeometry,我使用的是一个SQL Server 2008数据库,其中包含一个几何列,我现在在CSharp中加载和操作这些数据时遇到了问题,而以前这些数据都不是问题 我有一个Microsoft.SqlServer.Types.SqlGeometry类型的对象,我需要获取STNumGeometries,即: var numberOfGeometries = tmpDelytas[i].Delyta.DelytaGrans.STNumGeometries(); 但它导致了一个错误: ArgumentExcept
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();
这是可行的。那么有什么变化?更改为VS2012?添加/删除项目参考?据我所知,没有重大变化。我们已经向项目中添加了一个不相关的类,并且在服务器上运行了该代码的一个版本,自发布以来,除了向一个不相关的类添加一个函数之外,没有任何更改。服务器上的代码在相同的测试数据上运行良好。它是在所有数据点上还是在子集上运行良好?在这种情况下,多边形只是一个圆,一长串的点可以很好地结合在一起。当有许多较小的多边形时,会出现这种情况,但在这个测试用例中,数组中只有一个对象,一个delyta类,一个几何体,这导致了错误。奇怪。当它在断点上停止时,能否在“局部变量”窗口中深入到该值并在那里看到它?只是想知道您正在使用调试器这一事实是否是一个问题?