ThinkGeo.com    |     Documentation    |     Premium Support

Possible Bug Selecting Features

Guys,



We recently upgraded to MS v 8.0.0.189 and immediately began to experience a bug when selecting features. This bug only occurs with layers in Sql Server, NOT shapefiles. Also selection seams to work fine when using a RectangleShape, but not with a PointShape.



Here is the line of code that causes the bug to occur:


oFeatures = moSqlLayer.QueryTools.GetFeaturesContaining(e.WorldLocation, ReturningColumnsType.AllColumns)

And here is the exception detail:

System.NotSupportedException was unhandled

  HResult=-2146233067

  Message=This feature is currently not supported.

  Source=MapSuiteCore

  StackTrace:

       at ThinkGeo.MapSuite.Core.MsSql2008FeatureSource.4TM=(BaseShape 4jM=, QueryType 4zM=, IEnumerable`1 5DM=)

       at ThinkGeo.MapSuite.Core.MsSql2008FeatureSource.SpatialQueryCore(BaseShape targetShape, QueryType queryType, IEnumerable`1 returningColumnNames)

       at ThinkGeo.MapSuite.Core.FeatureSource.<>c__DisplayClass9.<spatialquery>b__8(IEnumerable`1 cns)

       at ThinkGeo.MapSuite.Core.FeatureSource.sxU=(IEnumerable`1 tBU=, Func`2 tRU=, IEnumerable`1 thU=)

       at ThinkGeo.MapSuite.Core.FeatureSource.SpatialQuery(BaseShape targetShape, QueryType queryType, IEnumerable`1 returningColumnNames, IEnumerable`1 filters)

       at ThinkGeo.MapSuite.Core.FeatureSource.SpatialQuery(BaseShape targetShape, QueryType queryType, IEnumerable`1 returningColumnNames)

       at ThinkGeo.MapSuite.Core.FeatureSource.SpatialQuery(BaseShape targetShape, QueryType queryType, ReturningColumnsType returningColumnNamesType)

       at ThinkGeo.MapSuite.Core.QueryTools.GetFeaturesContaining(BaseShape targetShape, ReturningColumnsType returningColumnNamesType)

       at BufferTest.Form1.WinformsMap1_MapClick(Object sender, MapClickWinformsMapEventArgs e) in C:\Users\steller\Documents\Visual Studio 2010\Projects\ThinkGeo\Selection Test\Form1.vb:line 42

       at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.OnMapClick(MapClickWinformsMapEventArgs e)

       at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.5xM=(InteractionArguments iBc=)

       at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.0hM=(Object dhc=, 0xU= dxc=)

       at ThinkGeo.MapSuite.DesktopEdition.MouseEventAnalyzer.OnMouseEvent(0xU= e)

       at ThinkGeo.MapSuite.DesktopEdition.MouseEventAnalyzer.txQ=(Double uBQ=, Double uRQ=, Double uhQ=, Double uxQ=)

       at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.fBc=(Object fRc=, MouseEventArgs fhc=)

       at System.Windows.Forms.Control.OnMouseMove(MouseEventArgs e)

       at System.Windows.Forms.Control.WmMouseMove(Message& m)

       at System.Windows.Forms.Control.WndProc(Message& m)

       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)

       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)

       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

       at System.Windows.Forms.Application.Run(ApplicationContext context)

       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()

       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()

       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)

       at BufferTest.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81

       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)

       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)

       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

       at System.Threading.ThreadHelper.ThreadStart()







I have attached a sample project. You will have to alter it to connect to your data source and also provide the correct Unit of Measure. When the sample starts just click on a feature to see the bug.




Thanks!



Steve</spatialquery>

001_Selection_Test.zip (26.4 KB)

Hi Steve, 
  
 Thanks for reporting this issue, we can recreate it and working on it now. 
 I will update here once it fix. 
  
 Thanks, 
 Troy

Hi guys, 
  
 Any progress on this bug? 
  
 Thanks! 
  
 Steve

Hi Steven, 
  
 Sorry for the delay update, I apologize to you that we were missing the dataset that recreated the issue, so would you mind to export a pieces of your database scripts for us to recreate it again?  
  
 Regards, 
 Troy 
  


Hi Troy, 
  
 I didn’t include any data with my original post. I get the exception whenever I try with any SQL Server layer. Are you saying you cannot reproduce the problem with your data? 
  
 Thanks, 
  
 Steve

Hi Steven,


Thanks for reporting us this bug. 

We already fixed it in the latest development version (8.0.286.0). This change will synchronize to relase branch till it is statble.



If the issue still persist, please feel free to let us know.



Thanks,

Kevin



Hi Steven, 
  
 It has been applied to product branch now, please try the latest version 8.0.0.289 or higher. 
  
 Thanks, 
 Johnny

Hi guys, 



EDIT: The original bug is fixed. Yay!



I downloaded version 8.0.0.290 and get a SQL Server syntax error whenever I try to load a layer from SQL Server: 'Incorrect syntax near the keyword ‘Where’. 



So I looked at the SQL script being generated by ThinkGeo and it is this: SELECT [shape].STAsBinary() as [shape],[DmKey] FROM vw_STANDForAddToMap WHERE (geometry::STGeomFromWKB(@Geometry,102003).STIntersects(shape)=1)  AND (Where shape IS NOT NULL) 



We are using a WHERE clause with a view to open our SQL layer. I think you can see the problem. 



Thanks! 



Steve 


Hi Steven, 
 I can’t reproduce the issue with MSSql2008 server, I think there may be something wrong with view data, could you please send your table structure, creating view script and a few sql record data for me? 
  
 Thanks, 
 Casper

Hi Casper, 



Thanks for your reply. Before I send the view data,table structure, records and so on let me clarify what I said in my previous post.  



In order to reproduce the bug you must use a MsSql2008FeatureLayer that has its WhereClause set to something. We use ‘Where shape IS NOT NULL’. shape is the name of our geometry field. So it’s not the view that’s causing the problem it’s the WhereClause. When the layer draws our ‘Where’ clause is being added to the Sql script generated by MapSuite in a way that causes the script submitted to Sql Server to have 2 ‘Where’ clauses.  


SELECT [shape].STAsBinary() as [shape],[DmKey] FROM vw_STANDForAddToMap WHERE (geometry::STGeomFromWKB(@Geometry,102003).STIntersects(shape)=1) AND (Where shape IS NOT NULL)

I have done a workaround that removes the 2nd  ‘Where’ clause from the script. I put the following code in the ExecutingSqlStatement event of the MsSql2008FeatureSource:


If e.ExecutingSqlStatementType = ExecutingSqlStatementType.ExecuteSpatialQuery Or
      e.ExecutingSqlStatementType = ExecutingSqlStatementType.GetFeaturesInsideBoundingBoxEx Or
      e.ExecutingSqlStatementType = ExecutingSqlStatementType.GetAllFeatures Or
      e.ExecutingSqlStatementType = ExecutingSqlStatementType.GetFeaturesByColumnValue Or
      e.ExecutingSqlStatementType = ExecutingSqlStatementType.GetFeaturesByIds Or
      e.ExecutingSqlStatementType = ExecutingSqlStatementType.GetFirstGeometryType Then
 
      Dim sTemp As String
      Dim iIndex As Integer = e.SqlStatement.IndexOf(“WHERE”, StringComparison.CurrentCultureIgnoreCase)
      If iIndex <> -1 Then
         sTemp = e.SqlStatement.Substring(iIndex + 5)
         Dim iIndex2 As Integer = sTemp.ToUpper.IndexOf(“WHERE”, StringComparison.CurrentCultureIgnoreCase)
         If iIndex2 <> -1 Then
            Dim sSql As String = e.SqlStatement.Substring(0, iIndex + 5) + sTemp.Substring(0, iIndex2) + sTemp.Substring(iIndex2 + 5)
            e.SqlStatement = sSql
            Debug.WriteLine(sSql)
         End If
      End If

The workaround fixes the problem.



We have been using the WhereClause on the MsSql2008FeatureLayer for years with no problem until now. The error occurs with every layer opened from Sql Server, not just certain ones.  



If you still cannot reproduce the problem after reading this I will be happy to send you some sample data.



Thanks, 



Steve 


Hi Steven, 
  
 I have fixed this bug, you can get it from the latest version 8.0.0.295 or later. 
  
 Thanks, 


Hi Don, 
  
 It’s working fine now! 
  
 Thanks! 
  
 Steve

Hi Steve, 
  
 I am glad to hear that works for you. 
  
 Any question please let me know. 
  
 Regards, 
  
 Don