ThinkGeo.com    |     Documentation    |     Premium Support

Using MsSql2008FeatureLayer to display views?

Hi,


In my solution I'm fetching data from a MS/SQL 2008 database.


This works perfectly when I use tables, but it errs when I try to fetch data from a view.


(I'm only setting the Name, ConnectionString, TableName, and FeatureIdColumn properties on the MsSql2008FeatureLayer)


I've experimentally tried to do a Select-Into, and switch the TableName property to the table (as the only change), and this works perfectly.


The somewhat cryptic error message shown in the top-left corner of the map when attempting to use the view, leads me to suspect that it concerns the view's join clause(s).


Is Map Suite incapable of using a view on SQL Server as its FeatureSource ?


 



Lars I,


I think you missed anything when you want to use View by MsSql2008FeatureLayer, please check the following code first:


 



string connectString = "Data Source=192.168.0.58,1041;Initial Catalog=DatabaseName;Persist Security Info=True;User ID=username;Password=password";
CustomMsSql2008FeatureLayer sql2008Layer = new CustomMsSql2008FeatureLayer(connectString, "states", "recid");
((CustomMsSql2008FeatureSource)sql2008Layer.FeatureSource).WkbFieldName = "YourWkbFieldName";
sql2008Layer.Open();
Collection<FeatureSourceColumn> columns = sql2008Layer.QueryTools.GetColumns();
 
foreach (FeatureSourceColumn column in columns)
{
      int maxLength = column.MaxLength;
      System.Diagnostics.Debug.WriteLine(string.Format("Column {0} Maxlength is {1}", column.ColumnName, column.MaxLength));
}
You can see that when you connect to the view you missed the settings for WkbFieldName property, this is the exact reason why your application would encounter error. If you connect to the table, you don't need to set this field value, because for the tables we will find out the wkb geometry field automatically, but if you connect to the view, this is a virtual structure, so maybe you don't join the wkb geometry field to the view and you have to set it manually,


Any more questions please let us know again,


Thanks,


Scott,