ThinkGeo.com    |     Documentation    |     Premium Support

Saving to a mssql2008featurelayer

Hi,


I am a newbie to this field, so kindly pardon my silly query. I have been unsuccessful at figuring out the usage of mssqlserverfeaturelayer. I am trying to read from a shapefile ,make some changes to it and then store it back in a sql database. I have been successfully at writing it back to a new shapefile. But I would like to write to a sql table. Could you provide a code snippet that illustrates doing this.


Thanks,


Amritayan



 


Hi Amritayan,
 
I just wonder what API you used for writing features back to a new shapefile, if you use the EditTools inside the ShapeFileFeatureLayer, you also can use the one inside the MsSql2008FeatureLayer store the features in database with the same code. If you use another way, please let me know, but I still recommend you to use EditTools because it’s easy to use that you don’t need know much knowledge of sql script. 
 
There are three major methods in EditTools object, Add, Update and Delete. If you call Add and pass in a feature, it will insert the feature as a record to the sql table, if you call Update and pass in a feature, it will update the record with the same feature id with the one’s you pass in. if you call Delete and pass in a feature id, it will delete the record with the same feature id.
 
        private void WriteFeaturesToFeatureLayer(IEnumerable<Feature> features, FeatureLayer featureLayer)
        {
            foreach (Feature feature in features)
            {
                featureLayer.Open();
                featureLayer.EditTools.BeginTransaction();
                featureLayer.EditTools.Add(feature);
                featureLayer.EditTools.CommitTransaction();
                featureLayer.Close();
            }
        }

 
Hope this code snippet can help you.
 
Thanks
 
James
 

Here's the code that I am trying to use:


 



            var sourceFilePath = ConfigurationManager.AppSettings["ZipCodeShapeFile"];
            var connString = "server=pu-mblanayak;database=ThinkGeo;uid=JamOwner;pwd=JamOwner;";
            var source = new ShapeFileFeatureLayer(sourceFilePath, ShapeFileReadWriteMode.ReadOnly);
            var destn = new MsSql2008FeatureLayer(connString, "featureLayer", "Id");

            source.Open();
            var featureset = source.FeatureSource.GetAllFeatures(ReturningColumnsType.AllColumns);
            source.Close();
            destn.Open();
            
            foreach (var feature in featureset)
            {
                destn.EditTools.BeginTransaction();
                destn.EditTools.Add(feature);
                destn.EditTools.CommitTransaction();

            }
            destn.Close();
 

The ThinkGeo database has a table named featureLayer with an int column 'id'. The code crashes at destn.open, with an error message stating that geography column could not be found. What kind of schema is the sql table supposed to have ?



Hi Amritayan


One other thing you need to notice is the Srid property to use MsSql2008FeatureLayer. The Srid of MsSql2008FeatureLayer is 4326 by default. So you should clarify what Srid is specified when you created the table ‘featureLayer’, sometimes 0 is the default value, if so you also need to set the Srid property of your MsSql2008FeatureLayer to 0 when you use it.
 
Hope this helps and any more questions please let use know.
 
Thanks,
 

Su



The method "CreateShapeFile" ShapefileFeatureLayer class lets us create an empty shape file with the columns that we want to be associated with the geospatial data. After the creation of an empty shapefile, features can be added, removed or edited using the edittools property of the layer. I haven't been able to find a method similar to "CreateShapeFile" in the MsSql2008FeatureLayer class. Are we supposed to create the appropiate table with the required schema using an api like ADO.Net and  then edit using the edittools property in MsSql2008FeatureLayer class ?



Amritayan,


Currently, we don’t have an API in MsSql2008FeatureLayer whose functionality is just like ‘CreateShapeFile’. I will forward your suggestion and requirement to my director to see if we can add such an API in the future release. 
 
Also as I known, there is a tool that can import the data from a shape file to SQL Server database, you could take a look at the detail information about it and download it at following link:
 
sharpgis.net/page/SQL-Se...Tools.aspx
 
Sorry for the inconvenience and any more questions please let us know.
 
Thanks,
 
Sun

Yep, such a feature would really useful. Anyway, I am using ado.net to create tables that I need and editing them with your api.  
  
 Thanks, 
 Amritayan

Amritayan, 
  
 We don’t support this kind of API so far, sorry for inconvenience. We will plan to research the possibility of implement this function. If we get any progress I will let you know. 
  
 Maybe you don’t need waste time for waiting, before that you can create the two addtional columns in your table by ado.net, the first column name is “ID”, the data type is integer, it has primary key so it’s indentity which increment is 1; the second column name is “geom”, the data type can be “Geometry” or “Gragraphy”. The MsSql2008FeatureSource will get information of your table from the system talbes, such as sys.columns, sys.tables and sys.types. 
  
 Thanks 
 James 


Amritayan, 
  
 We have added static method CreateTable in MsSql2008FeatureLayer and MsSql2008FeatureSource, you can get the latest version of SevicesEdition(Development branch) and have a try. 
  
 Thanks, 
  
 James