Select to view content in your preferred language

Inserting a new Feature Class into SDE

607
1
09-13-2010 07:34 AM
MattMoyles
Occasional Contributor
I've been trying to create a new featureclass in the SDE database, and  while it creates the FeatureClass fine.  It does not write any of the  fields.  I'm not sure what I'm doing wrong here.  If anyone could take a  look at this snippet of code thank you in advance!


            //Setup source dataset
            IFeatureClassName featureClassName = new FeatureClassNameClass();
            //IFeatureDatasetName featureDatasetName = new FeatureDatasetNameClass();
            IDatasetName sourceDatasetName = (IDatasetName)featureClassName;
            sourceDatasetName.Name = "Placemarks_line";
            sourceDatasetName.WorkspaceName = sourceWorkspaceName;
            IName sourceName = (IName)sourceDatasetName;

            IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open();

            IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
            IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;

            IWorkspace targetWorkspace = (IWorkspace)targetName.Open();
            IWorkspaceEdit editTargetWorkspace = (IWorkspaceEdit)targetWorkspace;

            editTargetWorkspace.StartEditing(true);

            IFeatureWorkspace featureTargetWorkspace = (IFeatureWorkspace)targetWorkspace;
            IFeatureDataset targetDataset = featureTargetWorkspace.OpenFeatureDataset("NOAA_Services");

            //creates a new feature class in the sde database
            IFeatureClass targetFeatureClass = targetDataset.CreateFeatureClass("NWS_Warnings4", sourceFeatureClass.Fields, ocDesc.InstanceCLSID, ocDesc.ClassExtensionCLSID, esriFeatureType.esriFTSimple, fcDesc.ShapeFieldName, "");
            IFeatureClassWrite writeTFC = (IFeatureClassWrite)targetFeatureClass;
            
            //copy features from source featureclass to target
            IQueryFilter qry = new QueryFilterClass();
            qry.WhereClause = "OID > 0";
            IFeatureCursor fcur = sourceFeatureClass.Search(qry, true);
            IFeature tmpFeature;
            while ((tmpFeature = fcur.NextFeature()) != null)
            {
                Console.WriteLine(tmpFeature.get_Value(0));
                editTargetWorkspace.StartEditOperation();
                writeTFC.WriteFeature(tmpFeature);
                editTargetWorkspace.StopEditOperation();
            }

            editTargetWorkspace.StopEditing(true);


Specifically, writeTFC.WriteFeature(tmpFeature); does not do what I expect it to.  Which is add the feature to the new featureclass I created.
0 Kudos
1 Reply
Ashwiniw
Deactivated User
You probably need to add fields to your featureclass, either copy fields (pFields - collection of fields) from the featureclass that contains features you are copying. Or create new fields individually using iFieldedit object, specify field type and length and other routine stuff.
0 Kudos