[fdo-users] inserting data into a SDF file
Jackie Ng
jumpinjackie at gmail.com
Thu Feb 19 19:31:37 EST 2009
If you look at the property value collection of the insert command in the
debugger, you will see the count will increase in increments of 4.
As a result, the insert command will use the same first 4 property values
for every insert operation.
To fix this, clear the property value collection of the insert command
before setting the property values.
Hope that helps.
- Jackie
vinay wrote:
>
> Hi All,
>
> I am using the FDO dlls from the MAP ObjectArx SDK 2009 in Visual studio
> 2008. I am writing a small app to understand FDO API. I am able to create
> a sdf file, describe schema for the sdf file, create feature class, etc. I
> created four datapropertydefinitions in which one is an identityProperty.
> I am inserting values into my properties in a for-loop. When I open this
> sdf file in map 2009, all columns have the same values except the auto
> generated property column as shown below.
>
> Please take a look in case I am missing something simple here.
>
> http://n2.nabble.com/file/n2349739/data.png
>
> Source code snippets for the sample app is below
>
> OSGeo.FDO.Schema.FeatureSchema Schema = new
> OSGeo.FDO.Schema.FeatureSchema("SchemaOne", "Sample Schema");
> OSGeo.FDO.Schema.FeatureClass ClassOne = new
> OSGeo.FDO.Schema.FeatureClass("Class one", "Class one for Schema One");
>
>
> OSGeo.FDO.Schema.DataPropertyDefinition DataProp1
> = new OSGeo.FDO.Schema.DataPropertyDefinition("Prop1", "Property one");
> OSGeo.FDO.Schema.DataPropertyDefinition DataProp2
> = new OSGeo.FDO.Schema.DataPropertyDefinition("Prop2", "Property two");
> OSGeo.FDO.Schema.DataPropertyDefinition DataProp3
> = new OSGeo.FDO.Schema.DataPropertyDefinition("Prop3", "Property three");
> OSGeo.FDO.Schema.DataPropertyDefinition DataProp4
> = new OSGeo.FDO.Schema.DataPropertyDefinition("Prop4", "Property four");
> DataProp1.DataType =
> OSGeo.FDO.Schema.DataType.DataType_Int32;
> DataProp1.IsAutoGenerated = true;
> DataProp1.Nullable = false;
>
> DataProp2.DataType =
> OSGeo.FDO.Schema.DataType.DataType_Decimal;
> DataProp2.IsAutoGenerated = false;
> DataProp2.Nullable = false;
> DataProp2.ReadOnly = false;
>
> DataProp3.DataType =
> OSGeo.FDO.Schema.DataType.DataType_Decimal;
> DataProp3.IsAutoGenerated = false;
> DataProp3.Nullable = false;
> DataProp3.ReadOnly = false;
>
> DataProp4.DataType =
> OSGeo.FDO.Schema.DataType.DataType_String;
> DataProp4.IsAutoGenerated = false;
> DataProp4.Nullable = false;
> DataProp4.ReadOnly = false;
> DataProp4.Length = 20;
>
> //Class one data props
> ClassOne.Properties.Add(DataProp1);
> ClassOne.IdentityProperties.Add(DataProp1);
> ClassOne.Properties.Add(DataProp2);
> ClassOne.Properties.Add(DataProp3);
> ClassOne.Properties.Add(DataProp4);
>
>
>
> OSGeo.FDO.Connections.Capabilities.IConnectionCapabilities connCap =
> conn.ConnectionCapabilities;
> ITransaction fdoTrans = null;
> if (connCap.SupportsTransactions())
> fdoTrans = conn.BeginTransaction();
>
> using (OSGeo.FDO.Commands.Feature.IInsert insert =
> conn.CreateCommand(OSGeo.FDO.Commands.CommandType.CommandType_Insert) as
> OSGeo.FDO.Commands.Feature.IInsert)
> {
>
> for (int nIndex = 1; nIndex < 5; nIndex++)
> {
>
> OSGeo.FDO.Commands.PropertyValue
> PropValue1 = null;
> PropValue1 = new
> OSGeo.FDO.Commands.PropertyValue();
> PropValue1.SetName(DataProp1.Name);
> PropValue1.Value = new
> OSGeo.FDO.Expression.Int32Value(nIndex);
> insert.PropertyValues.Add(PropValue1);
>
> PropValue1 = null;
> PropValue1 = new
> OSGeo.FDO.Commands.PropertyValue();
> PropValue1.SetName(DataProp2.Name);
> PropValue1.Value = new
> OSGeo.FDO.Expression.DecimalValue(1000.50 + nIndex);
> insert.PropertyValues.Add(PropValue1);
>
> PropValue1 = null;
> PropValue1 = new
> OSGeo.FDO.Commands.PropertyValue();
> PropValue1.SetName(DataProp3.Name);
> PropValue1.Value = new
> OSGeo.FDO.Expression.DecimalValue(2000.50 + nIndex);
> insert.PropertyValues.Add(PropValue1);
>
> PropValue1 = null;
> PropValue1 = new
> OSGeo.FDO.Commands.PropertyValue();
> PropValue1.SetName(DataProp4.Name);
> PropValue1.Value = new
> OSGeo.FDO.Expression.StringValue("Note"+nIndex.ToString());
> insert.PropertyValues.Add(PropValue1);
>
> try
> {
> using
> (OSGeo.FDO.Commands.Feature.IFeatureReader reader = insert.Execute())
> {
> while (reader.ReadNext()) { }
> }
> }
> catch (Exception ex)
> {
> //throw new
> FeatureServiceException("Error inserting new feature", ex);
> MessageBox.Show(ex.Message);
> }
> }
> }
> if (connCap.SupportsTransactions())
> fdoTrans.Commit();
> conn.Close();
>
>
>
--
View this message in context: http://n2.nabble.com/inserting-data-into-a-SDF-file-tp2349739p2356377.html
Sent from the FDO Users mailing list archive at Nabble.com.
More information about the fdo-users
mailing list