public System.Data.DataColumn GetAttributeType(IField2 field) { if (field == null) { throw new ArgumentNullException("field"); } if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeBlob) { return(new System.Data.DataColumn(field.Name, typeof(byte[]))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeDate) { return(new System.Data.DataColumn(field.Name, typeof(DateTime))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeDouble) { return(new System.Data.DataColumn(field.Name, typeof(double))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGlobalID) { return(new System.Data.DataColumn(field.Name, typeof(Guid))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeGUID) { return(new System.Data.DataColumn(field.Name, typeof(Guid))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeInteger) { return(new System.Data.DataColumn(field.Name, typeof(Int32))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeOID) { return(new System.Data.DataColumn(field.Name, typeof(Int32))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeRaster) { return(new System.Data.DataColumn(field.Name, typeof(System.Drawing.Image))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeSingle) { return(new System.Data.DataColumn(field.Name, typeof(Single))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeSmallInteger) { return(new System.Data.DataColumn(field.Name, typeof(Single))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString) { return(new System.Data.DataColumn(field.Name, typeof(string))); } else if (field.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeXML) { return(new System.Data.DataColumn(field.Name, typeof(byte[]))); } return(null); }
public bool CadastralTableAddField(ICadastralFabric pCadaFab, esriCadastralFabricTable eTable, esriFieldType FieldType, string FieldName, string FieldAlias, int FieldLength) { ITable pTable = pCadaFab.get_CadastralTable(eTable); // First check to see if a field with this name already exists if (pTable.FindField(FieldName) > -1) { if (pTable != null) { Marshal.ReleaseComObject(pTable); } return(false); } IField2 pField = null; try { //Create a new Field pField = new FieldClass(); //QI for IFieldEdit IFieldEdit2 pFieldEdit = (IFieldEdit2)pField; pFieldEdit.Type_2 = FieldType; pFieldEdit.Editable_2 = true; pFieldEdit.IsNullable_2 = true; pFieldEdit.Name_2 = FieldName; pFieldEdit.AliasName_2 = FieldAlias; pFieldEdit.Length_2 = FieldLength; //'.RasterDef_2 = pRasterDef pTable.AddField(pField); if (pField != null) { Marshal.ReleaseComObject(pField); } } catch (COMException ex) { if (pField != null) { Marshal.ReleaseComObject(pField); } MessageBox.Show(ex.Message); return(false); } return(true); }
/// <summary> /// 在Geodatabase中创建栅格数据编目 /// </summary> /// <param name="pRasterWSEx">目标Geodatabase工作区</param> /// <param name="pCatalogName">栅格编目的名称</param> /// <param name="pRasterFielsName">栅格列的名称</param> /// <param name="pShapeFieldName">几何要素列名称(Shape)</param> /// <param name="pRasterSpatialRef">几何要素列空间参考</param> /// <param name="pGeoSpatialRef">栅格列空间参考</param> /// <param name="pKeyword"> 栅格编目表的字段</param> /// <param name="eError">ArcSDE 适用, 表示configuration keyword</param> /// <returns></returns> private IRasterCatalog CreateCatalog(IRasterWorkspaceEx pRasterWSEx, string pCatalogName, string pRasterFielsName, string pShapeFieldName, ISpatialReference pRasterSpatialRef, ISpatialReference pGeoSpatialRef, string pKeyword, bool ismanaged, out Exception eError) { eError = null; IRasterCatalog pRasterCat = null; try { #region 创建字段 IFields pFields = new FieldsClass(); IFieldsEdit pFeildsEdit = pFields as IFieldsEdit; IField pField = null; pField = CreateCommonField("Name", esriFieldType.esriFieldTypeString); if (pField == null) { eError = new Exception("创建'name'字段出错!"); return(null); } pFeildsEdit.AddField(pField); IField2 pField2 = CreateRasterField(pRasterFielsName, pRasterSpatialRef, ismanaged); if (pField == null) { eError = new Exception("创建栅格字段出错!"); return(null); } pFeildsEdit.AddField(pField2); pField = CreateShapeField(pShapeFieldName, pGeoSpatialRef); if (pField == null) { eError = new Exception("创建几何字段出错!"); return(null); } pFeildsEdit.AddField(pField); pField = CreateOIDField("OBJECTID"); if (pField == null) { eError = new Exception("创建OID字段出错!"); return(null); } pFeildsEdit.AddField(pField); pField = null; if (pKeyword.Trim() == "") { pKeyword = "defaults"; } pFields = pFeildsEdit as IFields; //创建用户自定义字段 #endregion pRasterCat = pRasterWSEx.CreateRasterCatalog(pCatalogName, pFields, pShapeFieldName, pRasterFielsName, pKeyword); return(pRasterCat); } catch (System.Exception ex) { //******************************************************************* //guozheng added if (ModData.SysLog != null) { ModData.SysLog.Write(ex, null, DateTime.Now); } else { ModData.SysLog = new SysCommon.Log.clsWriteSystemFunctionLog(); ModData.SysLog.Write(ex, null, DateTime.Now); } //******************************************************************** eError = new Exception("创建栅格编目出错!\n" + ex.Message); return(null); } }
public bool CadastralTableAddFieldV1(ICadastralFabric pCadaFab, esriCadastralFabricTable eTable, esriFieldType FieldType, string FieldName, string FieldAlias, int FieldLength) { ITable pTable = pCadaFab.get_CadastralTable(eTable); // First check to see if a field with this name already exists if (pTable.FindField(FieldName) > -1) { if (pTable != null) { Marshal.ReleaseComObject(pTable); } return(false); } IDatasetComponent pDSComponent = (IDatasetComponent)pCadaFab; IDEDataset pDEDS = pDSComponent.DataElement; IDECadastralFabric pDECadaFab = (IDECadastralFabric)pDEDS; IField2 pField = null; try { //Create a new Field pField = new FieldClass(); //QI for IFieldEdit IFieldEdit2 pFieldEdit = (IFieldEdit2)pField; pFieldEdit.Type_2 = FieldType; pFieldEdit.Editable_2 = true; pFieldEdit.IsNullable_2 = true; pFieldEdit.Name_2 = FieldName; pFieldEdit.AliasName_2 = FieldAlias; pFieldEdit.Length_2 = FieldLength; //'.RasterDef_2 = pRasterDef } catch (COMException ex) { if (pField != null) { Marshal.ReleaseComObject(pField); } MessageBox.Show(ex.Message); return(false); } IArray pArr = pDECadaFab.CadastralTableFieldEdits; bool found = false; int cnt = pArr.Count; ICadastralTableFieldEdits pCadaTableFldEdits = null; IFields pFields = null; for (int i = 0; i <= (cnt - 1); i++) { pCadaTableFldEdits = (ICadastralTableFieldEdits)pArr.get_Element(i); IFieldsEdit pNewFields = new FieldsClass(); int fldCnt = 0; if (pCadaTableFldEdits.CadastralTable == eTable) { pFields = pCadaTableFldEdits.ExtendedAttributeFields; //Copy existing fields if (pFields != null) { fldCnt = pFields.FieldCount; pNewFields.FieldCount_2 = fldCnt + 1; for (int j = 0; j <= (fldCnt - 1); j++) { pNewFields.Field_2[j] = pFields.get_Field(j); } } else { pNewFields.FieldCount_2 = 1; } //Add the new field pNewFields.Field_2[fldCnt] = pField; //reset extended attribute fields pCadaTableFldEdits.ExtendedAttributeFields = pNewFields; found = true; break; } } if (!found) { pCadaTableFldEdits = new CadastralTableFieldEditsClass(); pCadaTableFldEdits.CadastralTable = eTable; //add the field to the table pFields = new FieldsClass(); int fldCnt = pFields.FieldCount; IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; pFieldsEdit.FieldCount_2 = fldCnt + 1; pFieldsEdit.Field_2[fldCnt] = pField; pCadaTableFldEdits.ExtendedAttributeFields = pFields; pArr.Add(pCadaTableFldEdits); Marshal.ReleaseComObject(pFields); } //Set the CadastralTableFieldEdits property on the DE to the array pDECadaFab.CadastralTableFieldEdits = pArr; // Update the schema ICadastralFabricSchemaEdit pSchemaEd = (ICadastralFabricSchemaEdit)pCadaFab; pSchemaEd.UpdateSchema(pDECadaFab); Marshal.ReleaseComObject(pField); return(true); }
public IField2 GetAttributeType(DataColumn geometryColumn) { if (geometryColumn == null) { throw new ArgumentNullException("geometryColumn"); } IField2 field = null; if (geometryColumn.DataType == typeof(byte[])) { field = new FieldClass(); IFieldEdit fieldEdit = (IFieldEdit)field; fieldEdit.Name_2 = geometryColumn.ColumnName; fieldEdit.AliasName_2 = geometryColumn.ColumnName; fieldEdit.Type_2 = esriFieldType.esriFieldTypeBlob; } else if (geometryColumn.DataType == typeof(DateTime)) { field = new FieldClass(); IFieldEdit fieldEdit = (IFieldEdit)field; fieldEdit.Name_2 = geometryColumn.ColumnName; fieldEdit.AliasName_2 = geometryColumn.ColumnName; fieldEdit.Type_2 = esriFieldType.esriFieldTypeDate; } else if (geometryColumn.DataType == typeof(double)) { field = new FieldClass(); IFieldEdit fieldEdit = (IFieldEdit)field; fieldEdit.Name_2 = geometryColumn.ColumnName; fieldEdit.AliasName_2 = geometryColumn.ColumnName; fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; } else if (geometryColumn.DataType == typeof(Guid) && geometryColumn.Unique) { field = new FieldClass(); IFieldEdit fieldEdit = (IFieldEdit)field; fieldEdit.Name_2 = geometryColumn.ColumnName; fieldEdit.AliasName_2 = geometryColumn.ColumnName; fieldEdit.Type_2 = esriFieldType.esriFieldTypeGlobalID; } else if (geometryColumn.DataType == typeof(Guid) && !geometryColumn.Unique) { field = new FieldClass(); IFieldEdit fieldEdit = (IFieldEdit)field; fieldEdit.Name_2 = geometryColumn.ColumnName; fieldEdit.AliasName_2 = geometryColumn.ColumnName; fieldEdit.Type_2 = esriFieldType.esriFieldTypeGUID; } else if (geometryColumn.DataType == typeof(Int32) && geometryColumn.Unique)//OID { field = new FieldClass(); IFieldEdit fieldEditOID = (IFieldEdit)field; fieldEditOID.Name_2 = geometryColumn.ColumnName; fieldEditOID.AliasName_2 = geometryColumn.ColumnName; fieldEditOID.Type_2 = esriFieldType.esriFieldTypeOID; } else if (geometryColumn.DataType == typeof(Int32) && !geometryColumn.Unique) { field = new FieldClass(); IFieldEdit fieldEdit = (IFieldEdit)field; fieldEdit.Name_2 = geometryColumn.ColumnName; fieldEdit.AliasName_2 = geometryColumn.ColumnName; fieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger; } else if (geometryColumn.DataType == typeof(Single)) { field = new FieldClass(); IFieldEdit fieldEdit = (IFieldEdit)field; fieldEdit.Name_2 = geometryColumn.ColumnName; fieldEdit.AliasName_2 = geometryColumn.ColumnName; fieldEdit.Type_2 = esriFieldType.esriFieldTypeSingle; } else if (geometryColumn.DataType == typeof(string)) { field = new FieldClass(); IFieldEdit fieldEdit = (IFieldEdit)field; fieldEdit.Name_2 = geometryColumn.ColumnName; fieldEdit.AliasName_2 = geometryColumn.ColumnName; fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; fieldEdit.Length_2 = geometryColumn.MaxLength; } else if (geometryColumn.DataType == typeof(System.Drawing.Image)) { field = new FieldClass(); IFieldEdit fieldEdit = ( IFieldEdit )field; fieldEdit.Name_2 = geometryColumn.ColumnName; fieldEdit.AliasName_2 = geometryColumn.ColumnName; fieldEdit.Type_2 = esriFieldType.esriFieldTypeRaster; } return(field); }