小编APH*_*APH的帖子

C#SQLGeography:诊断无效的几何

我们在MapInfo表中存储了大量的地理位置,我们现在希望将它们存储在SQL Server中.我们编写了C#实用程序来从MapInfo文件中读取地理位置并将它们导入SQL服务器.在大多数情况下,这是运作良好.然而,在使用我们内部开发的工具进行许多清理过程之后,我们仍然留下了大量被认为无效的地理位置SqlGeography.STIsValid().

对于大多数或所有这些情况,.NET方法SqlGeography.MakeValid()都能够创建有效的地理实例.但是,关于这方面的文档非常糟糕,我们不满足于简单地接受修改MakeValid而不理解地理被视为无效的原因以及MakeValid纠正它们的原因.

通过调用IsValidDetailed,我们得到一个没有详细记录的神秘错误消息.对于许多情况,返回的字符串IsValidDetailed看起来像这样:

24404:无效,因为多边形环(1)与自身或其他环相交.问题出现在几何集合的条目(19)中

我们尝试导入的所有地理对象都是多边形.通过解析此错误消息,我们尝试识别这些多边形中的问题多边形和环.但是,我们发现索引似乎与实际有问题的多边形/环实际不匹配.在许多情况下,索引超出了输入几何的数组范围.

有没有更好的方法来确定几何/地理对象被视为无效的具体原因,并确定哪些多边形,环或点有问题?

c# sql geometry geography

5
推荐指数
1
解决办法
1257
查看次数

SQL - 选择一年中日期大于一个月的数据

我有一个名为的表quiz,它有3列:

enterYear  enterMonth  quizMark

2013        7            9.5   
2013        8            8.5    
2013        9            9.75    
2013       10            10    
2013       11            7.75    
2013       12            8.5
2014        1            5   
2014        2            8.75    
2014        3            10
Run Code Online (Sandbox Code Playgroud)

现在,我想选择2013年9月之后输入的条目(包括9月).我试过这个错了:

select * from quiz q where q.year>=2013 and q.month>=9
Run Code Online (Sandbox Code Playgroud)

这省略了2014年的所有条目,因为它们的月数小于9,但我确实希望它们在结果中,因为它们是在2013年9月之后.

那么,我试过这个

select * from quiz q 
where Convert(date, CAST(q.year as varchar(4))+'/'+CAST(q.month as varchar(2))+'/01')>='2013/9/01'
Run Code Online (Sandbox Code Playgroud)

它显示了半秒钟的结果,然后通过给出错误消息迅速消失:

从字符串转换日期和/或时间时,消息241,级别16,状态1,行1转换失败."

有人可以帮助使用正确的代码来实现结果,非常感谢!

sql sql-server

1
推荐指数
1
解决办法
856
查看次数

标签 统计

sql ×2

c# ×1

geography ×1

geometry ×1

sql-server ×1