dbran

Raster Catalog creation within a GDB

Discussion created by dbran on Sep 6, 2011
Hey all:  I have been away from writing code for a little while.  Would someone want to tell me why they think the following code would be breaking?  Two things to note:  One is that the IFieldsEdit does not give me a method AddField(IField) that I would suspect but rather a SetField(int, IField) method.  Second, the call to create the raster catalog is failing with an error about trying to write to protected memory.  I have seen the latter error before, but I don't remember how to fix it.  Any guidance?  Thanks in advance!

           
// Open a workspace factory and create a new file GDB.
            Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
            IWorkspaceFactory fileGdbWSF = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
            IWorkspaceName fileGdbWSName = fileGdbWSF.Create("C:\\Data", "Testing5.gdb", null, 0);

            IName wsName = (IName)fileGdbWSName;
            IWorkspace fileGdbWS = (IWorkspace)wsName.Open();

            IRasterWorkspaceEx rasWS = (IRasterWorkspaceEx)fileGdbWS;

            IFields fields = new Fields();
            IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
            fieldsEdit.FieldCount_2 = 2;

            IField field1 = new Field();
            IFieldEdit fieldEdit1 = (IFieldEdit)field1;

            IField field2 = new Field();
            IFieldEdit fieldEdit2 = (IFieldEdit)field2;

            fieldEdit1.Name_2 = "FieldOne";
            fieldEdit1.AliasName_2 = "Field One";
            fieldEdit1.Type_2 = esriFieldType.esriFieldTypeString;
            fieldEdit1.Editable_2 = true;
            fieldEdit1.IsNullable_2 = true;
            fieldEdit1.Length_2 = 20;
            
            fieldEdit2.Name_2 = "FieldTwo";
            fieldEdit2.AliasName_2 = "Field One";
            fieldEdit2.Type_2 = esriFieldType.esriFieldTypeString;
            fieldEdit2.Editable_2 = true;
            fieldEdit2.IsNullable_2 = true;
            fieldEdit2.Length_2 = 20;
            
            // Why are these methods here instead of AddField(IField)?
            fieldsEdit.set_Field(0, field1);
            fieldsEdit.set_Field(1, field2);

            rasWS.CreateRasterCatalog("MyCatalog", fields, "Shape", "Raster", null);

Outcomes