两个数据库同步表数据,一分钟一次

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GT.Client
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            InItPlan();
            InItPlanDetail();
        }

        public DataRow CreateDataRow(DataTable inserttable,DataRow dr)
        {
            DataRow tempdr = inserttable.NewRow();
            tempdr["I_PLAN_ID"] = Convert.ToInt32(dr["I_PLAN_ID"]);
            tempdr["E_PLAN_TYPE"] = Convert.ToInt32(dr["E_PLAN_TYPE"]);
            tempdr["E_PLAN_STATE"] = Convert.ToInt32(dr["E_PLAN_STATE"]);
            tempdr["I_PLAN_SUBNO"] = Convert.ToInt32(dr["I_PLAN_SUBNO"]);
            tempdr["I_PLAN_NO"] = Convert.ToInt32(dr["I_PLAN_NO"]);
            tempdr["C_TRANUM"] = dr["C_TRANUM"].ToString();
            tempdr["I_CUTNUM"] = Convert.ToInt32(dr["I_CUTNUM"]);
            tempdr["I_QZ_ID"] = Convert.ToInt32(dr["I_QZ_ID"]);
            tempdr["D_CREATE"] = Convert.ToDateTime(dr["D_CREATE"]);
            tempdr["C_TRANUM_SEND"] = dr["C_TRANUM_SEND"].ToString();
            tempdr["I_LOCOM_ID"] = Convert.ToInt32(dr["I_LOCOM_ID"]);
            tempdr["I_DCZ_ID"] = Convert.ToInt32(dr["I_DCZ_ID"]);
            tempdr["C_DCZ_ID"] = dr["C_DCZ_ID"].ToString();
            tempdr["E_TURN_TYPE"] = Convert.ToInt32(dr["E_TURN_TYPE"]);
            tempdr["D_PL_START"] = Convert.ToDateTime(dr["D_PL_START"]);
            tempdr["D_PL_END"] = Convert.ToDateTime(dr["D_PL_END"]);
            tempdr["D_START"] = Convert.ToDateTime(dr["D_START"]);
            tempdr["D_END"] = Convert.ToDateTime(dr["D_END"]);
            tempdr["I_RANGE_ID"] = Convert.ToInt32(dr["I_RANGE_ID"]);
            tempdr["D_SEND"] = Convert.ToDateTime(dr["D_SEND"]);
            tempdr["C_REMARK"] = dr["C_REMARK"].ToString();
            tempdr["B_PUR_PRINT"] = Convert.ToInt32(dr["B_PUR_PRINT"]);
            tempdr["I_GETNUM"] = Convert.ToInt32(dr["I_GETNUM"]);
            tempdr["I_REMAIN"] = Convert.ToInt32(dr["I_REMAIN"]);
            return tempdr;

        }

        public void InItPlan()
        {
            string strSql = "select * from DM_PL_PLANLIST WITH (NOLOCK)";
            DataTable dt = ADOTools.ExcuteDataTable(ADOTools.OTHERCONNECTION_STR, strSql);
            string mystrSql = "select * from t_dcd_planlist WITH (NOLOCK)";
            DataTable mydt = ADOTools.ExcuteDataTable(ADOTools.LOCALCONNECTION_STR, mystrSql);
            DataTable inserttable = mydt.Clone();//仅复制表结构

            IEnumerable<DataRow> query2 = dt.AsEnumerable().Except(mydt.AsEnumerable(), DataRowComparer.Default);
            DataTable dt3 = query2.CopyToDataTable();
            foreach (DataRow dr in dt.Rows)
            {
                if (mydt.Rows.Count > 0)
                {
                    DataRow[] drlist = mydt.Select("I_PLAN_ID =" + dr["I_PLAN_ID"].ToString() + "");
                    if (drlist.Length == 0)
                    {
                        inserttable.Rows.Add(CreateDataRow(inserttable, dr));
                    }
                }
                else
                {
                    inserttable.Rows.Add(CreateDataRow(inserttable, dr));
                }

            }
            if (inserttable.Rows.Count > 0)
            {
                ADOTools.BulkInsert(ADOTools.LOCALCONNECTION_STR, inserttable, "t_dcd_planlist");
            }

        }

        public void InItPlanDetail()
        {
            string strSql = "select * from DM_PL_PLANTEXT WITH (NOLOCK)";
            DataTable dt = ADOTools.ExcuteDataTable(ADOTools.OTHERCONNECTION_STR, strSql);
            string mystrSql = "select * from t_dcd_plantext WITH (NOLOCK)";
            DataTable mydt = ADOTools.ExcuteDataTable(ADOTools.LOCALCONNECTION_STR, mystrSql);
            DataTable inserttable = mydt.Clone();//仅复制表结构

            IEnumerable<DataRow> query2 = dt.AsEnumerable().Except(mydt.AsEnumerable(), DataRowComparer.Default);
            DataTable dt3 = query2.CopyToDataTable();
            foreach (DataRow dr in dt.Rows)
            {
                if (mydt.Rows.Count > 0)
                {
                    DataRow[] drlist = mydt.Select("I_TEXT_ID =" + dr["I_TEXT_ID"].ToString() + "");
                    if (drlist.Length == 0)
                    {
                        inserttable.Rows.Add(CreateDataRowDetail(inserttable, dr));
                    }
                }
                else
                {
                    inserttable.Rows.Add(CreateDataRowDetail(inserttable, dr));
                }

            }
            if (inserttable.Rows.Count > 0)
            {
                ADOTools.BulkInsert(ADOTools.LOCALCONNECTION_STR, inserttable, "t_dcd_plantext");
            }

        }

        public DataRow CreateDataRowDetail(DataTable inserttable, DataRow dr)
        {
            DataRow tempdr = inserttable.NewRow();
            tempdr["I_PLAN_ID"] = Convert.ToInt32(dr["I_PLAN_ID"]);
            tempdr["I_TEXT_ID"] = Convert.ToInt32(dr["I_TEXT_ID"]);
            tempdr["I_CUT_NO"] = Convert.ToInt32(dr["I_CUT_NO"]);
            tempdr["I_YARD_ID"] = Convert.ToInt32(dr["I_YARD_ID"]);
            tempdr["I_LINE_ID"] = Convert.ToInt32(dr["I_LINE_ID"]);
            tempdr["E_PORT"] = Convert.ToInt32(dr["E_PORT"]);
            tempdr["I_MODE"] = Convert.ToInt32(dr["I_MODE"]);
            tempdr["I_CARNUM"] = Convert.ToInt32(dr["I_CARNUM"]);
            tempdr["E_CUT_STATUS"] = Convert.ToInt32(dr["E_CUT_STATUS"]);
            tempdr["I_REMAIN"] = Convert.ToInt32(dr["I_REMAIN"]);
            tempdr["C_REMARK"] =dr["C_REMARK"].ToString();
            return tempdr;

        }
    }
}

原文地址:https://www.cnblogs.com/daimaxuejia/p/9492560.html

时间: 2024-08-01 06:35:53

两个数据库同步表数据,一分钟一次的相关文章

Sql触发器调用外部程序对两个数据库进行数据同步

首先创建两个数据库:SyncA是数据源,SyncB是对SyncA进行同步的数据库. 在SyncA和SyncB中分别创建Source表和Target表,实际业务中,两张表的结构大多不相同.     然后创建一个空的项目:ClassLibrarySync

php同步mysql两个数据库中表的数据

分别创建两个数据库和两张表study库-zone表teaching库-area表 //****SQL脚本****// 1.创建teaching数据库area数据表 create database teaching; CREATE TABLE `area` ( `id` int(11) NOT NULL AUTO_INCREMENT, `areaID` varchar(50) CHARACTER SET utf8 DEFAULT NULL, `area` varchar(60) CHARACTER

实际建立DB-LINK,两个数据库之间的数据公用

创建DB-LINKcreate public database link dblink_名字 connect to 账户名字 identified by 账户密码 using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 数据库所在地址)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = 目标数据的名字) ) )'; 建立完数据库取数据: CREATE 表名 AS

数据库设计--数据的垂直拆分

如果表字段太多,如果表中有些字段比较大,即便是你只查有限的几个字段,在做表关联和全表扫的时候,由于扫描的数据块多,性能方面还是会不理想.因为oracle扫描的时候是按照块为单位扫描,读取的时候也是按块为单位读取,所以这种功能无法在SQL层面上优化的时候,可以考虑做数据的垂直切分,下面来做个试验: --制造数据不做垂直切分 create table test( a number, b varchar2(4000), c varchar2(4000), d varchar2(4000), e var

捕获mssqlservice 修改表后的数据,统一存储到特定的表中,之后通过代码同步两个库的数据

根据之前的一些想法,如果有A,B 两个数据库, 如果把A 用户通过界面产生的更新或者插入修改,操作的数据同步更新到B 库中,如果允许延时2分钟以内 想法一: 通过创建触发器 把变更的数据和对应的表名称统一存储到某个特定的表,然后通过程序获取转换成sql 更新B数据库中的表,本文主要说明使用该方法 想法二: 通过CDC 记录变更的内容, 园内搜索:  SQL Server 变更数据捕获(CDC)监控表数据  即可 . 以下是测试: drop database T_Mytest create dat

Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作

Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作 Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操作,使得我们不再为Oracle本身丑陋.难用的UI而抱怨.由于我们一般都是建建表.查查数据的操作居多,较少会考虑系统的整个Oracle的完整备份操作.但是在我们一些发布操作中,我们必须考虑如何把Oracle的对象.表数据导出到Sql脚本中,并且把创建Oracle表空间.创建Oracle数据库的操作也

jquery.datatable插件从数据库读取数据

一.分页 分页的基本思想是根据datatable的页码及每页显示的行数,将数据从数据库分段提出,然后再填充到表格中,以达到分页的效果. 这里需要用到datatable插件的几个属性: "sEcho":这个属性需要原封不动地传回给datatable,具体的作用我也不清楚,但是根据它值的变化情况来看,好像是一个操作次数的计数(之前我一直把它当做是pageindex来用,结果发现,不论我在datatable中是翻下一页还是翻上一页,它一直在增加.) "iDisplayStart&q

PHP两个字符串比较(人为出错),两字符串类型和数据表面相等,但strcmp()结果不为0

PHP中,比较两个字符串是否相等用:strcmp(): PHP strcmp() 函数 PHP String 函数 定义和用法 strcmp() 函数比较两个字符串. 该函数返回: 0 - 如果两个字符串相等 <0 - 如果 string1 小于 string2 >0 - 如果 string1 大于 string2 语法 strcmp(string1,string2) 参数 描述 string1 必需.规定要比较的第一个字符串. string2 必需.规定要比较的第二个字符串. 提示和注释 注

SQL SERVER 比较两个数据库中表和字段的差异

在开发过程中线上的数据库表字段和本地数据库表字段是存在的,也许我们在本地数据库中所增加的表字段都会有记录到SQL文件中,但当增加的表及字段名称较多时总会出现漏网之鱼,发布真是版本的时候回出现很多很多的问题,那么如何在发布新的版本时保证线上数据库与本地数据库中的表字段都是统一的了,下面我说一个比较笨的方法去保证两个数据库无差异. 1.将线上的数据库架构生成成为SQL,操作如下: 选择中某线上数据库 → 任务 → 生成脚本 → 下一步 → 选择对象窗口,选择(编写整个数据库及所有数据库对象的脚本)下