/// <summary> /// Deletes indicators and associated records from IUS and IC_IUS table /// </summary> /// <param name="indicatorNids"></param> public void DeleteIndicator(string indicatorNids) { DITables TableNames; IUSBuilder IUSBuilder; MetaDataBuilder MetadataBuilderObject; string AssocicatedIUSNIds = string.Empty; try { IUSBuilder = new IUSBuilder(this.DBConnection, this.DBQueries); // Step 1: Delete records from Indicator table foreach (DataRow Row in this.DBConnection.DILanguages(this.DBQueries.DataPrefix).Rows) { TableNames = new DITables(this.DBQueries.DataPrefix, "_" + Row[Language.LanguageCode].ToString()); this.DBConnection.ExecuteNonQuery(DevInfo.Lib.DI_LibDAL.Queries.Indicator.Delete.DeleteIndicator(TableNames.Indicator, indicatorNids)); } // Step 2: Delete records from IUS table // Step2(a): Get all associated IUSNIds AssocicatedIUSNIds = IUSBuilder.GetAllAssociatedIUSNids(indicatorNids, string.Empty, string.Empty); // Step2(b): Delete all associated IUSNIds IUSBuilder.DeleteIUS(AssocicatedIUSNIds); // delete metadata MetadataBuilderObject = new MetaDataBuilder(this.DBConnection, this.DBQueries); MetadataBuilderObject.DeleteMetadata(indicatorNids, MetadataElementType.Indicator); } catch (Exception ex) { throw new ApplicationException(ex.ToString()); } }
/// <summary> /// To import indicator information from mapped indicator /// </summary> /// <param name="indicatorInfo"></param> /// <param name="NidInSourceDB"></param> /// <param name="NidInTrgDB"></param> /// <param name="sourceQurey"></param> /// <param name="sourceDBConnection"></param> /// <returns></returns> public int ImportIndicatorFrmMappedIndicator(IndicatorInfo indicatorInfo, int NidInSourceDB, int NidInTrgDB, DIQueries sourceQurey, DIConnection sourceDBConnection) { int RetVal = -1; string metadataInfo = string.Empty; string SqlString = string.Empty; DataRow Row; DataTable TempTable; Dictionary<String, String> OldIconNId_NewIconNId = new Dictionary<string, string>(); MetaDataBuilder MetaDataBuilderObj; IndicatorInfo TrgIndicatorInfo; try { // set RetVal to targetNID RetVal = NidInTrgDB; if (RetVal > 0) { TrgIndicatorInfo = this.GetIndicatorInfo(FilterFieldType.NId, RetVal.ToString(), FieldSelection.Light); // dont import if trg indicator is global but source indicator is local if (TrgIndicatorInfo.Global & indicatorInfo.Global == false) { // dont import if trg indicator is global but source indicator is local } else { //update the gid,name and global on the basis of nid this.DBConnection.ExecuteNonQuery(DevInfo.Lib.DI_LibDAL.Queries.Indicator.Update.UpdateByNid(this.DBQueries.DataPrefix, this.DBQueries.LanguageCode, indicatorInfo.Name, indicatorInfo.GID, indicatorInfo.Global, indicatorInfo.Info, RetVal)); } } //update/insert icon DIIcons.ImportElement(NidInSourceDB, RetVal, IconElementType.Indicator, sourceQurey, sourceDBConnection, this.DBQueries, this.DBConnection); OldIconNId_NewIconNId = DIIcons.ImportElement(NidInSourceDB, RetVal, IconElementType.MetadataIndicator, sourceQurey, sourceDBConnection, this.DBQueries, this.DBConnection); // get metadata info. metadataInfo = indicatorInfo.Info; // Update IconNids in xml if exists foreach (string OldIconName in OldIconNId_NewIconNId.Keys) { metadataInfo = metadataInfo.Replace(OldIconName, OldIconNId_NewIconNId[OldIconName].ToString()); } metadataInfo = DICommon.CheckNConvertMetadataXml(metadataInfo); // Update Metadata this.DBConnection.ExecuteNonQuery(DALQueries.Indicator.Update.UpdateIndicatorInfo(this.DBQueries.DataPrefix, this.DBQueries.LanguageCode, DICommon.RemoveQuotes(metadataInfo), FilterFieldType.GId, indicatorInfo.GID)); // -- insert records in xslt tables SqlString = sourceQurey.Xslt.GetXSLT(NidInSourceDB.ToString(), MetadataElementType.Indicator); TempTable = sourceDBConnection.ExecuteDataTable(SqlString); if (TempTable.Rows.Count > 0) { Row = TempTable.Rows[0]; MetaDataBuilderObj = new MetaDataBuilder(this.DBConnection, this.DBQueries); MetaDataBuilderObj.ImportTransformInfo(Row[XSLT.XSLTText].ToString(), Row[XSLT.XSLTFile].ToString(), RetVal.ToString(), MetadataElementType.Indicator); } } catch (Exception ex) { throw new ApplicationException(ex.Message); } return RetVal; }
/// <summary> /// Returns true/false.True after successfully updation of xml text into database for the given element nid /// </summary> /// <param name="xmlText"></param> /// <param name="elementNid"></param> /// <returns></returns> public bool SaveMetadataTextIntoDB(string xmlText, int elementNid,MetaDataType elementType) { bool RetVal = false; MetaDataBuilder MetadataBuilderObj = new MetaDataBuilder(this.DBConnection, this.DBQueries); try { // update xml text into database MetadataBuilderObj.UpdateMetadataInfo(elementType, string.Empty, elementNid, xmlText); RetVal = true; } catch (Exception ex) { RetVal = false; ExceptionFacade.ThrowException(ex); } return RetVal; }
///// <summary> ///// Removes categories from collection. ///// </summary> //public void RemoveCategoriesFromCollection() //{ // this.UpdatedCategories.Clear(); //} /// <summary> /// Update category in metadata in database. /// </summary> /// <param name="oldCategories"></param> public void UpdateCategoryInMetadataIntoDB(Dictionary<int, string> oldCategories, MetaDataType mdType) { DataTable Table = null; MetadataInfo MetadataInfoObject = null; MetadataElementType MDElementType = MetadataElementType.Indicator; string MetadataColumnName = string.Empty; string MetadataString = string.Empty; string ElementNidColumnName = string.Empty; int ElementNid = 0; string MetadataText = string.Empty; DataTable CategoryTable; MetaDataBuilder MDBuilder = new MetaDataBuilder(this.DBConnection, this.DBQueries); // 1. get category table order by category_order CategoryTable = this.GetCategoryDataTableFrmDB(mdType); // 2. Get indicators/Area/Source from database where metadata text is not null or empty switch (mdType) { case MetaDataType.Indicator: MDElementType = MetadataElementType.Indicator; MetadataColumnName = DIColumns.Indicator.IndicatorInfo; ElementNidColumnName = DIColumns.Indicator.IndicatorNId; Table = this.DBConnection.ExecuteDataTable(this.DBQueries.Indicators.GetIndicator(FilterFieldType.None, String.Empty, FieldSelection.Heavy)); break; case MetaDataType.Map: MDElementType = MetadataElementType.Area; MetadataColumnName = DIColumns.Area_Map_Metadata.MetadataText; ElementNidColumnName = DIColumns.Area_Map_Metadata.MetadataNId; Table = this.DBConnection.ExecuteDataTable(this.DBQueries.Area.GetAreaMapMetadata(string.Empty)); break; case MetaDataType.Source: MDElementType = MetadataElementType.Source; MetadataColumnName = DIColumns.IndicatorClassifications.ICInfo; ElementNidColumnName = DIColumns.IndicatorClassifications.ICNId; Table = this.DBConnection.ExecuteDataTable(this.DBQueries.IndicatorClassification.GetIC(FilterFieldType.None, string.Empty, ICType.Source, FieldSelection.Heavy)); break; default: break; } // update metedata into database foreach (DataRow IndicatorRow in Table.Rows) { // get metadata from row MetadataString = Convert.ToString(IndicatorRow[MetadataColumnName]); if (string.IsNullOrEmpty(MetadataString)) { XmlDocument XmlDoc = new XmlDocument(); DevInfo.Lib.DI_LibBAL.Metadata.MetadataConverter.InsertRootNode(XmlDoc); MetadataString = XmlDoc.InnerXml; } //--check metadata string. if (!string.IsNullOrEmpty(MetadataString)) { // get metadataInfo object from metadata text MetadataInfoObject = this.GetMetadataInfoFrmMetadataText(MetadataString, MDElementType); if (MetadataInfoObject != null) { //-- update metadata categories into indicator metadataInfo object MetadataInfoObject = this.UpdateCategryInMetadataInfo(MetadataInfoObject, oldCategories, CategoryTable); ElementNid = Convert.ToInt32(IndicatorRow[ElementNidColumnName]); // get new metadata text and update it into database MetadataText = this.GetNewMetadataText(MetadataInfoObject); MDBuilder.UpdateMetadataInfo(mdType, string.Empty, ElementNid, MetadataText); #region"-- to be deleted --" //switch (mdType) //{ // //-if Indicator // case MetaDataType.Indicator: // MetadataInfoObject = this.UpdateCategryInMetadataInfo(MetadataInfoObject, oldCategories, DIQueries.MetadataElementTypeText[MetadataElementType.Indicator]); // ElementNid = Convert.ToInt32(IndicatorRow[DIColumns.Indicator.IndicatorNId]); // MetadataText = this.GetNewMetadataText(MetadataInfoObject); // this.SaveMetadataIntoDatabase(MetaDataType.Indicator, ElementNid, MetadataText); // break; // //-If map // case MetaDataType.Map: // MetadataInfoObject = this.UpdateCategryInMetadataInfo(MetadataInfoObject, oldCategories, DIQueries.MetadataElementTypeText[MetadataElementType.Area]); // ElementNid = Convert.ToInt32(IndicatorRow[DIColumns.Area_Map_Metadata .MetadataNId ]); // MetadataText = this.GetNewMetadataText(MetadataInfoObject); // this.SaveMetadataIntoDatabase(MetaDataType.Map, ElementNid, MetadataText); // break; // //-If source. // case MetaDataType.Source: // MetadataInfoObject = this.UpdateCategryInMetadataInfo(MetadataInfoObject, oldCategories, DIQueries.MetadataElementTypeText[MetadataElementType.Source]); // ElementNid = Convert.ToInt32(IndicatorRow[DIColumns.IndicatorClassifications.ICNId]); // MetadataText = this.GetNewMetadataText(MetadataInfoObject); // this.SaveMetadataIntoDatabase(MetaDataType.Source, ElementNid, MetadataText); // break; // default: // break; //} #endregion } //else ////--save metadata into database. //{ // switch (mdType) // { // case MetaDataType.Indicator: // ElementNid = Convert.ToInt32(IndicatorRow[DIColumns.Indicator.IndicatorNId]); // MetadataText = ""; // this.SaveMetadataIntoDatabase(MetaDataType.Indicator, ElementNid, MetadataText); // break; // case MetaDataType.Map: // ElementNid = Convert.ToInt32(IndicatorRow[DIColumns .Area_Map_Metadata.MetadataNId]); // MetadataText = ""; // this.SaveMetadataIntoDatabase(MetaDataType.Map, ElementNid, MetadataText); // break; // case MetaDataType.Source: // ElementNid = Convert.ToInt32(IndicatorRow[DIColumns .IndicatorClassifications .ICNId ]); // MetadataText = ""; // this.SaveMetadataIntoDatabase(MetaDataType.Source, ElementNid, MetadataText); // break; // default: // break; // } //} } } }
/// <summary> /// Deletes sources from Indicator_Classification table and associated records from IC_IUS table /// </summary> /// <param name="nids">Comma separated nids which may be blank</param> public void DeleteSources(string nids) { DITables TableNames; IndicatorClassificationBuilder ICBuilder; MetaDataBuilder MetadataBuilderObject; if (!string.IsNullOrEmpty(nids)) { try { // Step1: Delete records from IndicatorClassification table foreach (DataRow Row in this.DBConnection.DILanguages(this.DBQueries.DataPrefix).Rows) { TableNames = new DITables(this.DBQueries.DataPrefix, Row[Language.LanguageCode].ToString()); this.DBConnection.ExecuteNonQuery(DevInfo.Lib.DI_LibDAL.Queries.IndicatorClassification.Delete.DeleteSources(TableNames.IndicatorClassifications, nids)); } if (!string.IsNullOrEmpty(nids)) { // Step2: Delete records from IC_IUS table ICBuilder = new IndicatorClassificationBuilder(this.DBConnection, this.DBQueries); ICBuilder.DeleteClassificationIUSRelation(nids, string.Empty); // delete records data table //this.DBConnection.ExecuteNonQuery(this.DBQueries.Delete.Data.DeleteRecordsBySourceNIds(nids)); new DIDatabase(this.DBConnection, this.DBQueries).DeleteDataValue(string.Empty, string.Empty, string.Empty, nids); // delete metadata MetadataBuilderObject = new MetaDataBuilder(this.DBConnection, this.DBQueries); MetadataBuilderObject.DeleteMetadata(nids, MetadataElementType.Source); } } catch (Exception ex) { throw new ApplicationException(ex.ToString()); } } }
/// <summary> /// Import Area map,layer,etc from given source database or template into current databse/template /// </summary> /// <param name="selectedNIDs"></param> /// <param name="selectionCount">Send -1 to import all availble maps</param> /// <param name="sourceDBConnection"></param> /// <param name="sourceDBQueries"></param> /// <param name="requiredAreaLevel">Send -1 to import all levels area maps</param> public void ImportAreaMaps(string selectedNIDs, int selectionCount, DIConnection sourceDBConnection, DIQueries sourceDBQueries, int requiredAreaLevel) { int LayerNId = -1; int TrgtLayerNId = -1; int AreaNId; int MetaDataNId; int FeatureNId = -1; int CurrentRecordIndex = 0; bool IsSameLayer = true; bool IsItFeatureLayer = false; string LayerName = string.Empty; string Metadata = string.Empty; string FeatureType = string.Empty; string SqlString = string.Empty; //DataTable AreaTable; DataTable LayerTable = new DataTable(); DataTable TempTable; //DataTable TempFeatureTable; //DataTable TempXsltTable; //DbCommand Command; //DbDataAdapter adapter; //DbCommandBuilder CommandBuilder; //DataSet TempDataset; DataRow NewLayerRow; DataRow layerRow; DataRow TempFeatureTableRow; MetaDataBuilder MetaDataBuilderObj; List<int> NewAddedLayerNidList = null; string LangCode = string.Empty; try { // --------- MAPS --------- // -- Multiple Areas can be associated with the same Layer. So get the Unique list of AreaGIDs and LayerNIds against the // -- selected AreaNIds from the source Database. Loop through them and insert these Maps into Target Database try { this.RaiseStartProcessEvent(); if (selectionCount <= 0) { // -- GET ALL if (requiredAreaLevel <= 0) { // get all levels area TempTable = sourceDBConnection.ExecuteDataTable(sourceDBQueries.Area.GetAreaMapLayerInfo(FilterFieldType.None, string.Empty, FieldSelection.Heavy)); } else { // get required level areas TempTable = sourceDBConnection.ExecuteDataTable(sourceDBQueries.Area.GetAreaMapLayerInfo(FilterFieldType.Search, " A." + Area.AreaLevel + " <= " + requiredAreaLevel.ToString() + " ", FieldSelection.Heavy)); } LayerTable = sourceDBConnection.ExecuteDataTable(sourceDBQueries.Area.GetAreaMapLayer(DevInfo.Lib.DI_LibDAL.Queries.Area.Select.MapFilterFieldType.None, string.Empty, FieldSelection.Heavy)); } else { // -- GET SELECTED TempTable = sourceDBConnection.ExecuteDataTable(sourceDBQueries.Area.GetAreaMapLayerInfo(FilterFieldType.NId, selectedNIDs, FieldSelection.Heavy)); LayerTable = sourceDBConnection.ExecuteDataTable(sourceDBQueries.Area.GetAreaMapLayer(DevInfo.Lib.DI_LibDAL.Queries.Area.Select.MapFilterFieldType.AreaNId, selectedNIDs, FieldSelection.Heavy)); } } catch (Exception ex) { throw new ApplicationException(ex.ToString()); } //-- read records and insert it into oTempDT { this.RaiseBeforeProcessEvent(TempTable.Rows.Count); NewAddedLayerNidList = new List<int>(); //for (Index = 0; Index <= TempTable.Rows.Count - 1; Index++) foreach (DataRow TempTableRow in TempTable.Rows) { CurrentRecordIndex++; if (LayerNId != Convert.ToInt32(TempTableRow[Area_Map_Layer.LayerNId])) { LayerNId = Convert.ToInt32(TempTableRow[Area_Map_Layer.LayerNId]); IsSameLayer = false; } else { IsSameLayer = true; } // -- STEP 1: Check target AREA ID has any layer associated // -- Assumption: Source AreaId will be there in the Taget Database. //import maps by mapping AREA_ID using (DataTable AreaTable = this.DBConnection.ExecuteDataTable(this.DBQueries.Area.GetArea(FilterFieldType.ID, "'" + TempTableRow[Area.AreaID].ToString() + "'"))) { if (AreaTable.Rows.Count == 1) { AreaNId = Convert.ToInt32(AreaTable.Rows[0][Area.AreaNId]); } else { // -- This case will happen when 2 Areas with the same name are lying under the same Parent at the same level. // -- Because of that, only one Area would be created in the Target database AreaNId = -1; } } if (!(AreaNId == -1)) { // -- STEP 2: Remove the Layer Association and Add the Source Layer this.RemoveAreaMapAssociations(AreaNId,NewAddedLayerNidList, true); // -- STEP 3: Add Layer, Feature Layer and MetaData if (!IsSameLayer) { #region -- When layer is not same -- //-- Get the Map Layer Information into the Target Database if (LayerTable.Select(Area_Map_Layer.LayerNId + "= " + TempTableRow[Area_Map_Layer.LayerNId]).Length > 0) { layerRow = LayerTable.Select(Area_Map_Layer.LayerNId + "= " + TempTableRow[Area_Map_Layer.LayerNId])[0]; LayerName = Convert.ToString(TempTableRow[Area_Map_Metadata.LayerName]); TrgtLayerNId = this.UpdateAreamap(this.DBQueries.TablesName.AreaMapLayer, Convert.ToString(layerRow[Area_Map_Layer.LayerSize]), layerRow[Area_Map_Layer.LayerShp], layerRow[Area_Map_Layer.LayerShx], layerRow[Area_Map_Layer.Layerdbf], Convert.ToString(layerRow[Area_Map_Layer.LayerType]), Convert.ToString(layerRow[Area_Map_Layer.MinX]), Convert.ToString(layerRow[Area_Map_Layer.MinY]), Convert.ToString(layerRow[Area_Map_Layer.MaxX]), Convert.ToString(layerRow[Area_Map_Layer.MaxY]), Convert.ToString(layerRow[Area_Map_Layer.StartDate]), Convert.ToString(layerRow[Area_Map_Layer.EndDate]), Convert.ToString(layerRow[Area_Map_Layer.UpdateTimestamp])); NewAddedLayerNidList.Add(TrgtLayerNId); ////if (TrgtLayerNId == -111) ////{ //// // when the size of temp database/template file exceeds 1.90GB then compact database and reimport layer //// this.CompactDataBase(ref this.DBConnection); //// TrgtLayerNId = this.UpdateAreamap(this.DBQueries.TablesName.AreaMapLayer, Convert.ToString(layerRow[Area_Map_Layer.LayerSize]), layerRow[Area_Map_Layer.LayerShp], layerRow[Area_Map_Layer.LayerShx], layerRow[Area_Map_Layer.Layerdbf], Convert.ToString(layerRow[Area_Map_Layer.LayerType]), Convert.ToString(layerRow[Area_Map_Layer.MinX]), Convert.ToString(layerRow[Area_Map_Layer.MinY]), Convert.ToString(layerRow[Area_Map_Layer.MaxX]), Convert.ToString(layerRow[Area_Map_Layer.MaxY]), Convert.ToString(layerRow[Area_Map_Layer.StartDate]), Convert.ToString(layerRow[Area_Map_Layer.EndDate]), Convert.ToString(layerRow[Area_Map_Layer.UpdateTimestamp])); ////} } else { TrgtLayerNId = -1; } // -- Feature Layer IsItFeatureLayer = Convert.ToBoolean(TempTableRow[Area_Map.FeatureLayer]); if (IsItFeatureLayer) { // -- Add the Feature Layer Reference // -- Get Feature Name from the Source Database using (DataTable TempFeatureTable = sourceDBConnection.ExecuteDataTable(sourceDBQueries.Area.GetAreaFeatureByNid(TempTableRow[Area_Feature_Type.FeatureTypeNId].ToString()))) { if (TempFeatureTable.Rows.Count > 0) { TempFeatureTableRow = TempFeatureTable.Rows[0]; FeatureType = TempFeatureTableRow[Area_Feature_Type.FeatureType].ToString(); TempFeatureTable.Dispose(); // -- Check if this feature exists in the Target Database using (DataTable TempFeatureTable1 = this.DBConnection.ExecuteDataTable(this.DBQueries.Area.GetAreaFeatureByFeatureType("'" + FeatureType + "'"))) { if (TempFeatureTable1.Rows.Count > 0) { TempFeatureTableRow = TempFeatureTable1.Rows[0]; // -- If it exists then pick its reference FeatureNId = Convert.ToInt32(TempFeatureTableRow[Area_Feature_Type.FeatureTypeNId]); //-- Check If the Area already has the relation with this Feature using (DataTable TempFeatureTable2 = this.DBConnection.ExecuteDataTable(this.DBQueries.Area.GetDuplicateAreaFeature(AreaNId, FeatureNId))) { if (TempFeatureTable2.Rows.Count > 0) { // -- Same relation already exists // -- remove this relation this.DBConnection.ExecuteNonQuery(this.DBQueries.Delete.Area.DeleteAreaMap(AreaNId.ToString(), FeatureNId.ToString())); } } } else { // -- if it does not then create a new feature FeatureType = DICommon.RemoveQuotes(FeatureType); this.DBConnection.ExecuteScalarSqlQuery(DevInfo.Lib.DI_LibDAL.Queries.Area.Insert.InsertAreaMapFeature(this.DBQueries.DataPrefix, this.DBQueries.LanguageCode, FeatureType)); FeatureNId = Convert.ToInt32(this.DBConnection.ExecuteScalarSqlQuery("SELECT @@IDENTITY")); } } // TempFeatureTable.Dispose(); // TempFeatureTable = null; } } } // -- Add MetaData Text MetaDataNId = -1; Metadata = ""; if (!Information.IsDBNull(TempTableRow[Area_Map_Metadata.MetadataText])) { if (!(TempTableRow[Area_Map_Metadata.MetadataText].ToString().Length == 0)) { Metadata = TempTableRow[Area_Map_Metadata.MetadataText].ToString(); } } if (TrgtLayerNId > 0) { //add language based maps foreach (DataRow LangRow in this.DBConnection.DILanguages(this.DBQueries.DataPrefix).Rows) { LangCode = "_" + (LangRow[Language.LanguageCode].ToString().Trim("-".ToCharArray())); // use removeQuotes method for sLayerName this.DBConnection.ExecuteNonQuery(DevInfo.Lib.DI_LibDAL.Queries.Area.Insert.InsertAreaMapMetadata(this.DBQueries.DataPrefix, LangCode, DICommon.RemoveQuotes(Metadata), TrgtLayerNId, DICommon.RemoveQuotes(LayerName))); } // -- STEP 4: Create the Area Layer Association // -- Create a New Relation of the Area_Map with the LayerNId selected this.DBConnection.ExecuteNonQuery(DevInfo.Lib.DI_LibDAL.Queries.Area.Insert.InsertAreaMap(this.DBQueries.DataPrefix, this.DBQueries.LanguageCode, AreaNId, IsItFeatureLayer, FeatureNId, TrgtLayerNId)); #region -- update area xslt info -- //-- get info from source database SqlString = sourceDBQueries.Xslt.GetXSLT(LayerNId.ToString(), MetadataElementType.Area); using (DataTable TempXsltTable = sourceDBConnection.ExecuteDataTable(SqlString)) { // -- update xslt tables in the target database if (TempXsltTable.Rows.Count > 0) { MetaDataBuilderObj = new MetaDataBuilder(this.DBConnection, this.DBQueries); MetaDataBuilderObj.ImportTransformInfo(TempXsltTable.Rows[0][XSLT.XSLTText].ToString(), TempXsltTable.Rows[0][XSLT.XSLTFile].ToString(), TrgtLayerNId.ToString(), MetadataElementType.Area); } } #endregion } #endregion } else { #region -- if bSameLayer is false -- //"If more than 1 area is associated to the same map, then the map association happens only with one of the areas" // -- Feature Layer IsItFeatureLayer = Convert.ToBoolean(TempTableRow[Area_Map.FeatureLayer]); // -- Get Feature Name from the Source Database using (DataTable TempFeatureTable = sourceDBConnection.ExecuteDataTable(sourceDBQueries.Area.GetAreaFeatureByNid(TempTableRow[Area_Feature_Type.FeatureTypeNId].ToString()))) { if (TempFeatureTable.Rows.Count > 0) { TempFeatureTableRow = TempFeatureTable.Rows[0]; FeatureType = TempFeatureTableRow[Area_Feature_Type.FeatureType].ToString(); TempFeatureTable.Dispose(); // -- Check if this feature exists in the Target Database using (DataTable TempFeatureTable1 = this.DBConnection.ExecuteDataTable(this.DBQueries.Area.GetAreaFeatureByFeatureType("'" + FeatureType + "'"))) { if (TempFeatureTable1.Rows.Count > 0) { TempFeatureTableRow = TempFeatureTable1.Rows[0]; // -- If it exists then pick its reference FeatureNId = Convert.ToInt32(TempFeatureTableRow[Area_Feature_Type.FeatureTypeNId]); //-- Check If the Area already has the relation with this Feature using (DataTable TempFeatureTable2 = this.DBConnection.ExecuteDataTable(this.DBQueries.Area.GetDuplicateAreaFeature(AreaNId, FeatureNId))) { if (TempFeatureTable2.Rows.Count > 0) { // -- Same relation already exists // -- remove this relation this.DBConnection.ExecuteNonQuery(this.DBQueries.Delete.Area.DeleteAreaMap(AreaNId.ToString(), FeatureNId.ToString())); } } } else { // -- if it does not then create a new feature FeatureType = DICommon.RemoveQuotes(FeatureType); this.DBConnection.ExecuteScalarSqlQuery(DevInfo.Lib.DI_LibDAL.Queries.Area.Insert.InsertAreaMapFeature(this.DBQueries.DataPrefix, this.DBQueries.LanguageCode, FeatureType)); FeatureNId = Convert.ToInt32(this.DBConnection.ExecuteScalarSqlQuery("SELECT @@IDENTITY")); } } //TempFeatureTable.Dispose(); //TempFeatureTable = null; } } // -- STEP 4: Create the Area Layer Association // -- Create a New Relation of the Area_Map with the LayerNId selected this.DBConnection.ExecuteNonQuery(DevInfo.Lib.DI_LibDAL.Queries.Area.Insert.InsertAreaMap(this.DBQueries.DataPrefix, this.DBQueries.LanguageCode, AreaNId, IsItFeatureLayer, FeatureNId, TrgtLayerNId)); #endregion } } this.RaiseProcessInfoEvent(CurrentRecordIndex); } } } catch (Exception ex) { throw new ApplicationException(ex.ToString()); } }
/// <summary> /// Deletes areas from area and other associtated tables /// </summary> /// <param name="areaNIds"></param> public void DeleteAreas(string areaNIds) { DataTable TempDT = null; DataTable AreaTable = null; string LayerNids = string.Empty; string TableName = string.Empty; MetaDataBuilder MetadataBuilderObject; MapBuilder MapBuilderObj = new MapBuilder(this.DBConnection, this.DBQueries); try { LayerNids = DIConnection.GetDelimitedValuesFromDataTable(this.DBConnection.ExecuteDataTable(this.DBQueries.Area.GetAreaMapByAreaNIds(areaNIds, true)), Area_Map.LayerNId); // Step 1: Delete records from area table foreach (DataRow Row in this.DBConnection.DILanguages(this.DBQueries.DataPrefix).Rows) { TableName = this.DBQueries.DataPrefix + AreaTableName + "_" + Row[Language.LanguageCode].ToString(); this.DBConnection.ExecuteNonQuery(DevInfo.Lib.DI_LibDAL.Queries.Area.Delete.DeleteArea(TableName, areaNIds)); } // Step2: delete metadata MetadataBuilderObject = new MetaDataBuilder(this.DBConnection, this.DBQueries); MetadataBuilderObject.DeleteMetadata(areaNIds, MetadataElementType.Area); if (!string.IsNullOrEmpty(LayerNids)) { //-- Remove Associated Table Records MapBuilderObj.DeleteMap(LayerNids); } // -- STEP 3: Delete All First Level Child of this Area TempDT = this.DBConnection.ExecuteDataTable(this.DBQueries.Area.GetArea(FilterFieldType.ParentNId, areaNIds)); foreach (DataRow row in TempDT.Rows) { this.DeleteAreas(row[Area.AreaNId].ToString()); } // -- step 4 delete from data table new DIDatabase(this.DBConnection, this.DBQueries).DeleteByAreaNIds(areaNIds); } catch (Exception ex) { throw new ApplicationException(ex.ToString()); } }