/// <summary>
        /// 删除消息。
        /// </summary>
        /// <param name="type"></param>
        /// <param name="xxbh"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool DelMessage(int type, string xxbh, string userId)
        {
            DataTableOperation dtOperation = new DataTableOperation();
            OracleDbOperation  dbOperation = new OracleDbOperation(OracleHelper.ConnectionString);

            dbOperation.BeginTransaction();

            string tableName;
            string sql;
            List <OracleParameter> parameters = new List <OracleParameter>();

            tableName = "xtxx";
            sql       = "select * from " + tableName + " a where a.xxbh = :xxbh";
            parameters.Clear();
            parameters.Add(new OracleParameter("xxbh", xxbh));
            DataTable dtXtxx = dbOperation.ExecuteDataTable(sql, tableName, parameters);

            if (dtXtxx.Rows.Count > 0)
            {
                DataRow drXtxx = dtXtxx.Rows[0];

                tableName = "xtxxjs";
                sql       = "select * from " + tableName + " a where a.jsxxbh = :jsxxbh";
                parameters.Clear();
                parameters.Add(new OracleParameter("jsxxbh", xxbh));
                DataTable dtXtxxjs = dbOperation.ExecuteDataTable(sql, tableName, parameters);
                switch (type)
                {
                case 0:
                    var drXtxxjs = (from DataRow dr in dtXtxxjs.Rows
                                    where dr["JSR"].ToString() == userId
                                    select dr).First();
                    drXtxxjs["jsrsc"] = "1";
                    break;

                case 1:
                    drXtxx["fsrsc"] = "1";
                    break;
                }
                int xtxxjsUndeleteCount = (from DataRow dr in dtXtxxjs.Rows
                                           where dr["jsrsc"].ToString() == "0"
                                           select dr).Count();
                string xtxxDeleteState = drXtxx["fsrsc"].ToString();
                if (xtxxjsUndeleteCount == 0 && xtxxDeleteState == "1")
                {
                    dtOperation.ClearDbDataTable(dtXtxx);
                    dtOperation.ClearDbDataTable(dtXtxxjs);
                    DeleteMessageFile(xxbh, null);
                }
                dbOperation.UpdateDataTable(dtXtxx);
                dbOperation.UpdateDataTable(dtXtxxjs);
                dbOperation.Commit();
            }
            else
            {
                dbOperation.Rollback();
                return(false);
            }
            return(true);
        }
Exemple #2
0
        /// <summary>
        /// 删除消息。
        /// </summary>
        /// <param name="type"></param>
        /// <param name="xxbh"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public bool DelMessage(int type, string xxbh, string userId)
        {
            DataTableOperation dtOperation = new DataTableOperation();
            OracleDbOperation dbOperation = new OracleDbOperation(OracleHelper.ConnectionString);

            dbOperation.BeginTransaction();

            string tableName;
            string sql;
            List<OracleParameter> parameters = new List<OracleParameter>();

            tableName = "xtxx";
            sql = "select * from " + tableName + " a where a.xxbh = :xxbh";
            parameters.Clear();
            parameters.Add(new OracleParameter("xxbh", xxbh));
            DataTable dtXtxx = dbOperation.ExecuteDataTable(sql, tableName, parameters);
            if (dtXtxx.Rows.Count > 0)
            {
                DataRow drXtxx = dtXtxx.Rows[0];

                tableName = "xtxxjs";
                sql = "select * from " + tableName + " a where a.jsxxbh = :jsxxbh";
                parameters.Clear();
                parameters.Add(new OracleParameter("jsxxbh", xxbh));
                DataTable dtXtxxjs = dbOperation.ExecuteDataTable(sql, tableName, parameters);
                switch (type)
                {
                    case 0:
                        var drXtxxjs = (from DataRow dr in dtXtxxjs.Rows
                                        where dr["JSR"].ToString() == userId
                                        select dr).First();
                        drXtxxjs["jsrsc"] = "1";
                        break;
                    case 1:
                        drXtxx["fsrsc"] = "1";
                        break;
                }
                int xtxxjsUndeleteCount = (from DataRow dr in dtXtxxjs.Rows
                                           where dr["jsrsc"].ToString() == "0"
                                           select dr).Count();
                string xtxxDeleteState = drXtxx["fsrsc"].ToString();
                if (xtxxjsUndeleteCount == 0 && xtxxDeleteState == "1")
                {
                    dtOperation.ClearDbDataTable(dtXtxx);
                    dtOperation.ClearDbDataTable(dtXtxxjs);
                    DeleteMessageFile(xxbh, null);
                }
                dbOperation.UpdateDataTable(dtXtxx);
                dbOperation.UpdateDataTable(dtXtxxjs);
                dbOperation.Commit();
            }
            else
            {
                dbOperation.Rollback();
                return false;
            }
            return true;
        }
Exemple #3
0
        protected void SyncByAddAfterDelete(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation,
                                            string tableName, string condition, Action deleteAction, Action <DataRow> actionDetail, Action <string, int> actionCompleted)
        {
            string whereCondition = string.IsNullOrEmpty(condition) ? string.Empty : " where " + condition;
            string selectNoneSql  = "select * from " + tableName + " where 1 <> 1";
            string selectSql      = "select * from " + tableName + whereCondition;
            string deleteSql      = "delete from " + tableName + whereCondition;

            targetDbOperation.ExecuteNonQuery(deleteSql, null);
            DataTable dtSource = sourceDbOperation.ExecuteDataTable(selectSql, tableName, null);
            DataTable dtTarget = targetDbOperation.ExecuteDataTable(selectNoneSql, tableName, null);

            foreach (DataRow drSource in dtSource.Rows)
            {
                DataRow newTargetDr = dtTarget.NewRow();
                Copy(drSource, newTargetDr);
                dtTarget.Rows.Add(newTargetDr);
                if (actionDetail != null)
                {
                    actionDetail(newTargetDr);
                }
            }
            targetDbOperation.UpdateDataTable(dtTarget);
            if (actionCompleted != null)
            {
                actionCompleted(tableName, dtTarget.Rows.Count);
            }
        }
Exemple #4
0
 public SyncDataLog GetSyncLogInfo(OracleDbOperation oracleDb, string code)
 {
     SyncDataLog dataInfo = null;
     string strSql = "select * from syncdataLog where ccode = '{0}' and syncType = {1} order by syncdate desc";
     strSql = string.Format(strSql, code, ((int)SyncDataType.System).ToString());
     DataTable dt = oracleDb.ExecuteDataTable(strSql);
     if (dt.Rows.Count > 0)
     {
         dataInfo = (SyncDataLog)new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[0], typeof(SyncDataLog));
     }
     return dataInfo;
 }
Exemple #5
0
        public SyncDataLog GetSyncLogInfo(OracleDbOperation oracleDb, string code)
        {
            SyncDataLog dataInfo = null;
            string      strSql   = "select * from syncdataLog where ccode = '{0}' and syncType = {1} order by syncdate desc";

            strSql = string.Format(strSql, code, ((int)SyncDataType.System).ToString());
            DataTable dt = oracleDb.ExecuteDataTable(strSql);

            if (dt.Rows.Count > 0)
            {
                dataInfo = (SyncDataLog) new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[0], typeof(SyncDataLog));
            }
            return(dataInfo);
        }
        private void SyncXxbh(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation, string targetCode,
                              Action <DataRow> actionAddTargetMessageFile, Action <DataRow> actionDeleteSourceMessageFile, Action <DataRow> actionDeleteTargetMessageFile)
        {
            string sql;
            List <OracleParameter> parameters = new List <OracleParameter>();
            DataTable dt;

            //用指定的行政区代码去系统信息接收表中查询所有与接收人行政区代码相等的记录,即需要同步的信息编号。
            sql = "select distinct(jsxxbh) from xtxxjs where jsrxzdm = :jsrxzdm";
            parameters.Clear();
            parameters.Add(new OracleParameter("jsrxzdm", targetCode));
            dt = sourceDbOperation.ExecuteDataTable(sql, "temp", parameters);
            var xxbhs = (from DataRow dr in dt.Rows
                         select "'" + dr[0] + "'").ToArray();

            if (xxbhs.Length > 0)
            {
                //分别取源系统和目标系统取出需要同步的信息接收数据。
                string xxbhsCondition = string.Join(",", xxbhs);
                sql = "select * from xtxxjs where jsxxbh in (" + xxbhsCondition + ")";
                DataTable dtSourceXtxxjs = sourceDbOperation.ExecuteDataTable(sql, "xtxxjs", null);
                DataTable dtTargetXtxxjs = targetDbOperation.ExecuteDataTable(sql, "xtxxjs", null);

                string xtxxCondition = "xxbh in (" + xxbhsCondition + ")";

                //进行比对同步。
                LogOperation.WriteSyncTableTitle(sbLog, "xtxx", SyncType.Comparer, xtxxCondition);
                SyncByComparer(sourceDbOperation, targetDbOperation, "xtxx", xtxxCondition, new List <string>()
                {
                    "xxbh"
                }, true,
                               (dr) =>
                {
                    string xxbh = dr["xxbh"].ToString();
                    LogOperation.Append(sbLog, "添加目标系统信息!信息编号:" + xxbh);
                    foreach (var needAddXtxxjs in dtSourceXtxxjs.Select("jsxxbh = '" + xxbh + "' and jsrxzdm = '" + targetCode + "'"))
                    {
                        DataRow newXtxxjs = dtTargetXtxxjs.NewRow();
                        Copy(needAddXtxxjs, newXtxxjs);
                        dtTargetXtxxjs.Rows.Add(newXtxxjs);
                    }
                    if (actionAddTargetMessageFile != null)
                    {
                        actionAddTargetMessageFile(dr);
                    }
                },
                               (dr) =>
                {
                    LogOperation.Append(sbLog, "删除垃圾系统信息!信息编号:" + dr["XXBH"]);
                },
                               (drSource, drTarget) =>
                {
                    string xxbh = drSource["XXBH"].ToString();
                    LogOperation.Append(sbLog, "更新系统信息!信息编号:" + xxbh);

                    if (actionAddTargetMessageFile != null)
                    {
                        actionAddTargetMessageFile(drSource);
                    }

                    //判断是否需要删除邮件。
                    if (drSource["FSRSC"].ToString() == "1")
                    {
                        var querySource = from DataRow dr in dtSourceXtxxjs.Rows
                                          where dr["JSXXBH"].ToString() == xxbh
                                          select dr;
                        var queryTarget = from DataRow dr in dtTargetXtxxjs.Rows
                                          where dr["JSXXBH"].ToString() == xxbh
                                          select dr;
                        bool needDelete = true;
                        foreach (var itemSource in querySource)
                        {
                            string jsr         = itemSource["JSR"].ToString();
                            var queryTargetJsr = (from dr in queryTarget
                                                  where dr["JSR"].ToString() == jsr
                                                  select dr).FirstOrDefault();
                            if (queryTargetJsr == null)
                            {
                                if (itemSource["JSRSC"].ToString() == "0")
                                {
                                    needDelete = false;
                                    break;
                                }
                            }
                            else
                            {
                                if (queryTargetJsr["JSRSC"].ToString() == "0")
                                {
                                    needDelete = false;
                                    break;
                                }
                            }
                        }

                        //删除邮件。
                        if (needDelete)
                        {
                            dtOperation.DeleteDbDataRow(drSource, (dr) =>
                            {
                                dtOperation.DeleteDbDataRows(querySource, null);
                                LogOperation.Append(sbLog, "删除源系统信息,因为收发双方都已删除此信息!信息编号:" + xxbh);
                                actionDeleteSourceMessageFile(drSource);
                            });
                            dtOperation.DeleteDbDataRow(drTarget, (dr) =>
                            {
                                dtOperation.DeleteDbDataRows(queryTarget, null);
                                LogOperation.Append(sbLog, "删除目标系统信息,因为收发双方都已删除此信息!信息编号:" + xxbh);
                                actionDeleteSourceMessageFile(drTarget);
                            });
                        }
                    }
                });

                //保存信息接收信息。
                sourceDbOperation.UpdateDataTable(dtSourceXtxxjs);
                targetDbOperation.UpdateDataTable(dtTargetXtxxjs);
            }
        }
Exemple #7
0
        protected void SyncByComparer(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation,
                                      string tableName, string condition, List <string> Pks, bool isDelete,
                                      Action <DataRow> actionAdd, Action <DataRow> actionDelete, Action <DataRow, DataRow> actionModify, Action <DataRow, DataRow> actionDetail)
        {
            string whereCondition = string.IsNullOrEmpty(condition) ? string.Empty : " where " + condition;
            string orderCondition = string.Empty;

            if (Pks.Count > 0)
            {
                orderCondition = " order by " + string.Join(",", Pks.ToArray());
            }
            string         selectSql   = "select * from " + tableName + whereCondition + orderCondition;
            DataTable      dtSource    = sourceDbOperation.ExecuteDataTable(selectSql, tableName, null);
            DataTable      dtTarget    = targetDbOperation.ExecuteDataTable(selectSql, tableName, null);
            List <DataRow> needDeletes = new List <DataRow>();

            if (isDelete)
            {
                foreach (DataRow drTarget in dtTarget.Rows)
                {
                    needDeletes.Add(drTarget);
                }
            }
            foreach (DataRow drSource in dtSource.Rows)
            {
                DataRow drTarget = null;
                foreach (DataRow drTargetTemp in dtTarget.Rows)
                {
                    bool equals = true;
                    foreach (var pk in Pks)
                    {
                        if (drSource[pk].ToString() != drTargetTemp[pk].ToString())
                        {
                            equals = false;
                            break;
                        }
                    }
                    if (equals)
                    {
                        drTarget = drTargetTemp;
                    }
                }
                if (drTarget == null)
                {
                    DataRow newDrTarget = dtTarget.NewRow();
                    Copy(drSource, newDrTarget);
                    dtTarget.Rows.Add(newDrTarget);
                    if (actionAdd != null)
                    {
                        actionAdd(newDrTarget);
                    }
                    if (actionDetail != null)
                    {
                        actionDetail(drSource, newDrTarget);
                    }
                }
                else
                {
                    Copy(drSource, drTarget);
                    if (actionModify != null)
                    {
                        actionModify(drSource, drTarget);
                    }
                    if (actionDetail != null)
                    {
                        actionDetail(drSource, drTarget);
                    }
                    if (isDelete)
                    {
                        needDeletes.Remove(drTarget);
                    }
                }
            }
            if (isDelete)
            {
                dtOperation.DeleteDbDataRows(needDeletes, actionDelete);
            }
            sourceDbOperation.UpdateDataTable(dtSource);
            targetDbOperation.UpdateDataTable(dtTarget);
        }
Exemple #8
0
 protected void SyncByAddAfterDelete(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation,
     string tableName, string condition, Action deleteAction, Action<DataRow> actionDetail, Action<string, int> actionCompleted)
 {
     string whereCondition = string.IsNullOrEmpty(condition) ? string.Empty : " where " + condition;
     string selectNoneSql = "select * from " + tableName + " where 1 <> 1";
     string selectSql = "select * from " + tableName + whereCondition;
     string deleteSql = "delete from " + tableName + whereCondition;
     targetDbOperation.ExecuteNonQuery(deleteSql, null);
     DataTable dtSource = sourceDbOperation.ExecuteDataTable(selectSql, tableName, null);
     DataTable dtTarget = targetDbOperation.ExecuteDataTable(selectNoneSql, tableName, null);
     foreach (DataRow drSource in dtSource.Rows)
     {
         DataRow newTargetDr = dtTarget.NewRow();
         Copy(drSource, newTargetDr);
         dtTarget.Rows.Add(newTargetDr);
         if (actionDetail != null)
         {
             actionDetail(newTargetDr);
         }
     }
     targetDbOperation.UpdateDataTable(dtTarget);
     if (actionCompleted != null)
     {
         actionCompleted(tableName, dtTarget.Rows.Count);
     }
 }
Exemple #9
0
 protected void SyncByComparer(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation,
     string tableName, string condition, List<string> Pks, bool isDelete,
     Action<DataRow> actionAdd, Action<DataRow> actionDelete, Action<DataRow, DataRow> actionModify, Action<DataRow, DataRow> actionDetail)
 {
     string whereCondition = string.IsNullOrEmpty(condition) ? string.Empty : " where " + condition;
     string orderCondition = string.Empty;
     if (Pks.Count > 0) orderCondition = " order by " + string.Join(",", Pks.ToArray());
     string selectSql = "select * from " + tableName + whereCondition + orderCondition;
     DataTable dtSource = sourceDbOperation.ExecuteDataTable(selectSql, tableName, null);
     DataTable dtTarget = targetDbOperation.ExecuteDataTable(selectSql, tableName, null);
     List<DataRow> needDeletes = new List<DataRow>();
     if (isDelete)
     {
         foreach (DataRow drTarget in dtTarget.Rows)
         {
             needDeletes.Add(drTarget);
         }
     }
     foreach (DataRow drSource in dtSource.Rows)
     {
         DataRow drTarget = null;
         foreach (DataRow drTargetTemp in dtTarget.Rows)
         {
             bool equals = true;
             foreach (var pk in Pks)
             {
                 if (drSource[pk].ToString() != drTargetTemp[pk].ToString())
                 {
                     equals = false;
                     break;
                 }
             }
             if (equals)
             {
                 drTarget = drTargetTemp;
             }
         }
         if (drTarget == null)
         {
             DataRow newDrTarget = dtTarget.NewRow();
             Copy(drSource, newDrTarget);
             dtTarget.Rows.Add(newDrTarget);
             if (actionAdd != null)
             {
                 actionAdd(newDrTarget);
             }
             if (actionDetail != null)
             {
                 actionDetail(drSource, newDrTarget);
             }
         }
         else
         {
             Copy(drSource, drTarget);
             if (actionModify != null)
             {
                 actionModify(drSource, drTarget);
             }
             if (actionDetail != null)
             {
                 actionDetail(drSource, drTarget);
             }
             if (isDelete)
             {
                 needDeletes.Remove(drTarget);
             }
         }
     }
     if (isDelete)
     {
         dtOperation.DeleteDbDataRows(needDeletes, actionDelete);
     }
     sourceDbOperation.UpdateDataTable(dtSource);
     targetDbOperation.UpdateDataTable(dtTarget);
 }
        private Gis_Data<Gis_Dk> getGisdata(string strSql, string conStr, bool allData)
        {
            Gis_Data<Gis_Dk> dataList = null;
            OracleDbOperation oracleDb = new OracleDbOperation(conStr);
            DataTable dt = oracleDb.ExecuteDataTable(strSql);
            if (dt.Rows.Count == 1)
            {
                dataList = (Gis_Data<Gis_Dk>)new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[0], typeof(Gis_Data<Gis_Dk>));

                strSql = "select * from gis_dk where gisId = " + dataList.GisId;

                dt = oracleDb.ExecuteDataTable(strSql);

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Gis_Dk dk = (Gis_Dk)new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[i], typeof(Gis_Dk));
                    dk.GeoID = i;

                    ////界址点
                    strSql = "select * from gis_jzd where gisid = '{0}' and dkid = '{1}' order by dkqh,xh ";
                    strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                    DataTable dtJzd = oracleDb.ExecuteDataTable(strSql);

                    string dkqh = string.Empty;
                    Gis_Jzqy jzqy = null;
                    for (int j = 0; j < dtJzd.Rows.Count; j++)
                    {
                        if ((dtJzd.Rows[j]["dkqh"].ToString() != dkqh && jzqy != null) || j == dtJzd.Rows.Count - 1)
                        {
                            dk.RingList.Add(jzqy);
                        }
                        if (dtJzd.Rows[j]["dkqh"].ToString() != dkqh)
                        {
                            jzqy = new Gis_Jzqy();
                            jzqy.GeoID = int.Parse(dtJzd.Rows[j]["dkqh"].ToString());
                        }
                        Gis_Jzd jzd = (Gis_Jzd)new DataTableOperation().ConvertFromDataRowToEntity(dtJzd.Rows[j], typeof(Gis_Jzd));
                        jzd.GeoID = jzd.XH;
                        jzqy.PointList.Add(jzd);

                        dkqh = dtJzd.Rows[j]["dkqh"].ToString();
                    }
                    if (allData)
                    {
                        ////地类图斑
                        strSql = "select * from gis_dltb where gisId = {0} and dkId = '{1}'";
                        strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                        DataTable dtDltb = oracleDb.ExecuteDataTable(strSql);
                        for (int j = 0; j < dtDltb.Rows.Count; j++)
                        {
                            Gis_Dltb dltb = (Gis_Dltb)new DataTableOperation().ConvertFromDataRowToEntity(dtDltb.Rows[j], typeof(Gis_Dltb));
                            dk.DLTBList.Add(dltb);
                        }

                        ////线状地物
                        strSql = "select * from gis_xzdw where gisId = {0} and dkId = '{1}'";
                        strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                        DataTable dtXzdw = oracleDb.ExecuteDataTable(strSql);
                        for (int j = 0; j < dtXzdw.Rows.Count; j++)
                        {
                            Gis_Xzdw xzdw = (Gis_Xzdw)new DataTableOperation().ConvertFromDataRowToEntity(dtXzdw.Rows[j], typeof(Gis_Xzdw));
                            dk.XZDWList.Add(xzdw);
                        }
                    }
                    dataList.DkList.Add(dk);
                }
            }
            return dataList;
        }
        private Gis_Data <Gis_Dk> getGisdata(string strSql, string conStr, bool allData)
        {
            Gis_Data <Gis_Dk> dataList = null;
            OracleDbOperation oracleDb = new OracleDbOperation(conStr);
            DataTable         dt       = oracleDb.ExecuteDataTable(strSql);

            if (dt.Rows.Count == 1)
            {
                dataList = (Gis_Data <Gis_Dk>) new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[0], typeof(Gis_Data <Gis_Dk>));

                strSql = "select * from gis_dk where gisId = " + dataList.GisId;

                dt = oracleDb.ExecuteDataTable(strSql);

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Gis_Dk dk = (Gis_Dk) new DataTableOperation().ConvertFromDataRowToEntity(dt.Rows[i], typeof(Gis_Dk));
                    dk.GeoID = i;

                    ////界址点
                    strSql = "select * from gis_jzd where gisid = '{0}' and dkid = '{1}' order by dkqh,xh ";
                    strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                    DataTable dtJzd = oracleDb.ExecuteDataTable(strSql);

                    string   dkqh = string.Empty;
                    Gis_Jzqy jzqy = null;
                    for (int j = 0; j < dtJzd.Rows.Count; j++)
                    {
                        if ((dtJzd.Rows[j]["dkqh"].ToString() != dkqh && jzqy != null) || j == dtJzd.Rows.Count - 1)
                        {
                            dk.RingList.Add(jzqy);
                        }
                        if (dtJzd.Rows[j]["dkqh"].ToString() != dkqh)
                        {
                            jzqy       = new Gis_Jzqy();
                            jzqy.GeoID = int.Parse(dtJzd.Rows[j]["dkqh"].ToString());
                        }
                        Gis_Jzd jzd = (Gis_Jzd) new DataTableOperation().ConvertFromDataRowToEntity(dtJzd.Rows[j], typeof(Gis_Jzd));
                        jzd.GeoID = jzd.XH;
                        jzqy.PointList.Add(jzd);

                        dkqh = dtJzd.Rows[j]["dkqh"].ToString();
                    }
                    if (allData)
                    {
                        ////地类图斑
                        strSql = "select * from gis_dltb where gisId = {0} and dkId = '{1}'";
                        strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                        DataTable dtDltb = oracleDb.ExecuteDataTable(strSql);
                        for (int j = 0; j < dtDltb.Rows.Count; j++)
                        {
                            Gis_Dltb dltb = (Gis_Dltb) new DataTableOperation().ConvertFromDataRowToEntity(dtDltb.Rows[j], typeof(Gis_Dltb));
                            dk.DLTBList.Add(dltb);
                        }

                        ////线状地物
                        strSql = "select * from gis_xzdw where gisId = {0} and dkId = '{1}'";
                        strSql = string.Format(strSql, dataList.GisId, dk.DkId);
                        DataTable dtXzdw = oracleDb.ExecuteDataTable(strSql);
                        for (int j = 0; j < dtXzdw.Rows.Count; j++)
                        {
                            Gis_Xzdw xzdw = (Gis_Xzdw) new DataTableOperation().ConvertFromDataRowToEntity(dtXzdw.Rows[j], typeof(Gis_Xzdw));
                            dk.XZDWList.Add(xzdw);
                        }
                    }
                    dataList.DkList.Add(dk);
                }
            }
            return(dataList);
        }
        private void SyncXxbh(OracleDbOperation sourceDbOperation, OracleDbOperation targetDbOperation, string targetCode,
            Action<DataRow> actionAddTargetMessageFile, Action<DataRow> actionDeleteSourceMessageFile, Action<DataRow> actionDeleteTargetMessageFile)
        {
            string sql;
            List<OracleParameter> parameters = new List<OracleParameter>();
            DataTable dt;

            //用指定的行政区代码去系统信息接收表中查询所有与接收人行政区代码相等的记录,即需要同步的信息编号。
            sql = "select distinct(jsxxbh) from xtxxjs where jsrxzdm = :jsrxzdm";
            parameters.Clear();
            parameters.Add(new OracleParameter("jsrxzdm", targetCode));
            dt = sourceDbOperation.ExecuteDataTable(sql, "temp", parameters);
            var xxbhs = (from DataRow dr in dt.Rows
                         select "'" + dr[0] + "'").ToArray();

            if (xxbhs.Length > 0)
            {
                //分别取源系统和目标系统取出需要同步的信息接收数据。
                string xxbhsCondition = string.Join(",", xxbhs);
                sql = "select * from xtxxjs where jsxxbh in (" + xxbhsCondition + ")";
                DataTable dtSourceXtxxjs = sourceDbOperation.ExecuteDataTable(sql, "xtxxjs", null);
                DataTable dtTargetXtxxjs = targetDbOperation.ExecuteDataTable(sql, "xtxxjs", null);

                string xtxxCondition = "xxbh in (" + xxbhsCondition + ")";

                //进行比对同步。
                LogOperation.WriteSyncTableTitle(sbLog, "xtxx", SyncType.Comparer, xtxxCondition);
                SyncByComparer(sourceDbOperation, targetDbOperation, "xtxx", xtxxCondition, new List<string>() { "xxbh" }, true,
                    (dr) =>
                    {
                        string xxbh = dr["xxbh"].ToString();
                        LogOperation.Append(sbLog, "添加目标系统信息!信息编号:" + xxbh);
                        foreach (var needAddXtxxjs in dtSourceXtxxjs.Select("jsxxbh = '" + xxbh + "' and jsrxzdm = '" + targetCode + "'"))
                        {
                            DataRow newXtxxjs = dtTargetXtxxjs.NewRow();
                            Copy(needAddXtxxjs, newXtxxjs);
                            dtTargetXtxxjs.Rows.Add(newXtxxjs);
                        }
                        if (actionAddTargetMessageFile != null)
                        {
                            actionAddTargetMessageFile(dr);
                        }
                    },
                    (dr) =>
                    {
                        LogOperation.Append(sbLog, "删除垃圾系统信息!信息编号:" + dr["XXBH"]);
                    },
                    (drSource, drTarget) =>
                    {
                        string xxbh = drSource["XXBH"].ToString();
                        LogOperation.Append(sbLog, "更新系统信息!信息编号:" + xxbh);

                        if (actionAddTargetMessageFile != null)
                        {
                            actionAddTargetMessageFile(drSource);
                        }

                        //判断是否需要删除邮件。
                        if (drSource["FSRSC"].ToString() == "1")
                        {
                            var querySource = from DataRow dr in dtSourceXtxxjs.Rows
                                              where dr["JSXXBH"].ToString() == xxbh
                                              select dr;
                            var queryTarget = from DataRow dr in dtTargetXtxxjs.Rows
                                              where dr["JSXXBH"].ToString() == xxbh
                                              select dr;
                            bool needDelete = true;
                            foreach (var itemSource in querySource)
                            {
                                string jsr = itemSource["JSR"].ToString();
                                var queryTargetJsr = (from dr in queryTarget
                                                      where dr["JSR"].ToString() == jsr
                                                      select dr).FirstOrDefault();
                                if (queryTargetJsr == null)
                                {
                                    if (itemSource["JSRSC"].ToString() == "0")
                                    {
                                        needDelete = false;
                                        break;
                                    }
                                }
                                else
                                {
                                    if (queryTargetJsr["JSRSC"].ToString() == "0")
                                    {
                                        needDelete = false;
                                        break;
                                    }
                                }
                            }

                            //删除邮件。
                            if (needDelete)
                            {
                                dtOperation.DeleteDbDataRow(drSource, (dr) =>
                                {
                                    dtOperation.DeleteDbDataRows(querySource, null);
                                    LogOperation.Append(sbLog, "删除源系统信息,因为收发双方都已删除此信息!信息编号:" + xxbh);
                                    actionDeleteSourceMessageFile(drSource);
                                });
                                dtOperation.DeleteDbDataRow(drTarget, (dr) =>
                                {
                                    dtOperation.DeleteDbDataRows(queryTarget, null);
                                    LogOperation.Append(sbLog, "删除目标系统信息,因为收发双方都已删除此信息!信息编号:" + xxbh);
                                    actionDeleteSourceMessageFile(drTarget);
                                });
                            }
                        }
                    });

                //保存信息接收信息。
                sourceDbOperation.UpdateDataTable(dtSourceXtxxjs);
                targetDbOperation.UpdateDataTable(dtTargetXtxxjs);
            }
        }