项目目标:

首先是将Access数据库中的大量数据(已经存好的原有百万级数据)转存到mysql数据库中,然后,随着Access中数据的增加,要同步更新mysql数据库,更新周期自定。

思路:一开始的转存前篇博客已经讲过,这里就忽略了,主要是实现Access数据更新后同步到mysql中。思路是:

1.用MAX的sql语句查找mysql数据表,找出时间那一列的最大时间MAX(patrol_time)

2.select出Access数据表中时间大于MAX(patrol_time)的数据,用datareader存到reader里面

3.用分列的方式,将读出来最大时间大于MAX(patrol_time)的数据从reader中存储到数组中

4.建立循环,将数组中的数按照对应写入mysql中

5.将以上逻辑写入死循环,设置循环执行的时间间隔

思路清楚了,下面直接上代码,没有什么难的不能理解的地方:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using MySql.Data;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Data.OleDb;
using System.Drawing;
using System.Threading;namespace 。。。。。。
{class Program{static void Main(string[] args){while (true){//读出mysql数据库中已有数据的最大时间string connstrMysql = ConfigurationManager.AppSettings["connstr"];MySqlConnection connMysql = new MySqlConnection(connstrMysql);connMysql.Open();Console.WriteLine("打开Mysql数据库成功");string sql = "select MAX(mysql时间列) from mysql表";MySqlCommand cmd = new MySqlCommand(sql, connMysql);string sqlresult = cmd.ExecuteScalar().ToString();Console.WriteLine(sqlresult);connMysql.Close();//读出Access数据库中大于mysql最大时间的数据string connstrAccess = ConfigurationManager.AppSettings["connectionstring"];OleDbConnection connAccess = new OleDbConnection(connstrAccess);connAccess.Open();Console.WriteLine("打开Access数据库成功");string sqlaccess = "select * from Access表 where Access时间列>'" + sqlresult + "'order by Access时间列";//string sqltest = "select MAX(ID) from Access表";//OleDbCommand accesstestcmd = new OleDbCommand(sqltest, connAccess);//string accessresult = accesstestcmd.ExecuteScalar().ToString();//Console.WriteLine("当前最大ID:"+accessresult);OleDbCommand accesscmd = new OleDbCommand(sqlaccess, connAccess);OleDbDataReader reader = accesscmd.ExecuteReader();//将读出的数据存入数组中,按照列名分成11个数组ArrayList listid = new ArrayList();ArrayList listnumberId = new ArrayList();ArrayList listperson = new ArrayList();ArrayList listlocation = new ArrayList();ArrayList listpartoltime = new ArrayList();ArrayList listnameAttrib = new ArrayList();ArrayList listitemname = new ArrayList();ArrayList listitemvalue = new ArrayList();ArrayList listnumber = new ArrayList();ArrayList listplantime = new ArrayList();ArrayList listequipment = new ArrayList();while (reader.Read()){listid.Add(reader["ID"].ToString());listnumberId.Add(reader["nh"].ToString());listperson.Add(reader["ry"].ToString());listlocation.Add(reader["dd"].ToString());listpartoltime.Add(reader["xjsj"].ToString());listnameAttrib.Add(reader["bhsx"].ToString());listitemname.Add(reader["sj"].ToString());listitemvalue.Add(reader["sjsz"].ToString());listnumber.Add(reader["bh"].ToString());listplantime.Add(reader["jhmc"].ToString());listequipment.Add(reader["sblb"].ToString());}//判断是否有新数据需要插入if (reader.HasRows == false){Console.WriteLine("暂时无数据更新.");connAccess.Close();}else{//将存入数组的数据插入Mysql中Console.WriteLine("存在更新数据,开始更新");connMysql.Open();for (int i = 0; i < listid.Count; i++){string sqlInsert = String.Format("INSERT INTO mysql表(id,numberId,person,location,patrol_time,numAtrrib,item_name,item_value,number,plan_name,equipment)" +"VALUES " +"({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}');", listid[i], listnumberId[i], listperson[i], listlocation[i], listpartoltime[i], listnameAttrib[i], listitemname[i], listitemvalue[i], listnumber[i], listplantime[i], listequipment[i]);MySqlCommand cmdInsert = new MySqlCommand(sqlInsert, connMysql);cmdInsert.ExecuteNonQuery();Console.WriteLine(sqlInsert);}Console.WriteLine("更新完毕");connMysql.Close();}connAccess.Close();GC.Collect();GC.WaitForPendingFinalizers();Thread.Sleep(432000000);Console.ReadLine();}}}
}

逻辑上和代码上都是用的比较基础和简单的方法实现的,由于时间间隔比较长,所以不用考虑大量循环的性能问题,就直接用的数组来存和写。

其实稍微有点技术含量的地方就是,如何判定是否有新增加的数据。这一块儿,核心代码是这几句:

string sql = "select MAX(patrol_time) from patrol_records";MySqlCommand cmd = new MySqlCommand(sql, connMysql);string sqlresult = cmd.ExecuteScalar().ToString();

以及:

Console.WriteLine("打开Access数据库成功");string sqlaccess = "select * from lwmain where xjsj>'" + sqlresult + "'order by xjsj";

注意用大于号来比较的时候,单双引号的使用,因为原数据要求的时间列是用的varchar类型,所以在sql语句里,要加上单引号''

Access数据库到Mysql数据库实时更新相关推荐

  1. access mysql 同步更新数据_[access 数据库同步]Access数据库到Mysql数据库实时更新

    项目目标: 首先是将Access数据库中的大量数据(已经存好的原有百万级数据)转存到mysql数据库中,然后,随着Access中数据的增加,要同步更新mysql数据库,更新周期自定. 思路:一开始的转 ...

  2. 数据库【MySQL数据库介绍】

    数据库[MySQL数据库介绍] 1.MySQL概要 MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司.MySQL 是一种关联数据库管理系统,关联 ...

  3. mysql数据库,mysql数据库监控介绍

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBM ...

  4. mysql使用释放资源_数据库--释放mysql数据库资源

    数据库--释放mysql数据库资源 背景 nikeodong 之前做了项目的数据库主从,在全备的过程发现数据库是越来越大了:最后发现是资源不释放的问题. 目的 为了解决 mysql 资源不释放的问题. ...

  5. mysql数据库压缩备份_MySQL数据库之mysql数据库备份命令分享(mysql压缩数据库备份)...

    本文主要向大家介绍了MySQL数据库之mysql数据库备份命令分享(mysql压缩数据库备份) ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 备份MySQL数据库的命令 复制代 ...

  6. oracle数据库跟mysql的区别_关于Oracle数据库与MySQL数据库的几点区别

    Oracle数据库与MySQL数据库的区别是本文我们主要要介绍的内容,接下来我们就开始介绍这部分内容,希望能够对您有所帮助. Oracle与MySQL的区别: 1.在Oracle中用select * ...

  7. abp更改为mysql_ABPZero系列教程之拼多多卖家工具 更改数据库为MySQL数据库

    本文主要向大家介绍了ABPZero系列教程之拼多多卖家工具 更改数据库为MySQL数据库 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. < 因为要部署项目到云服务器,不想 ...

  8. MySQL数据库配置data文件_MySQL数据库之MySQL数据库迁移data文件夹位置详细步骤

    本文主要向大家介绍了MySQL数据库之MySQL数据库迁移data文件夹位置详细步骤 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 由于yum安装mysql的时候,数据库的da ...

  9. 价格查询系统 数据库 PHP Mysql,信息实时查询系统的设计与实现(PHP+MySQL)

    摘  要 信息查询系统是基于校园网络环境下设计,满足师生员工对校内综合信息实时查询,及对校园网上各类信息资源的检索服务需求. 本系统采用了浏览器/服务器(B/S)模式.以MySQL数据库为存储方式,运 ...

最新文章

  1. Shell脚本十三问
  2. Markdown学习测试.md
  3. 论文公式编号右对齐_word技能之添加样式以及公式自动编号
  4. 比特币钱包(1) 钱包协议总览
  5. C++ 中的 IO流
  6. VTK:可视化算法之ColoredAnnotatedCube
  7. [蓝桥杯][算法提高VIP]最小乘积(提高型)-排序
  8. POJ-1384 Piggy-Bank 多重背包变形
  9. 一、快速开始一个 MyBatis项目(详解)
  10. linux shell 变量减法_Linux Shell (3) - 变量运算
  11. 数据可视化之单属性(字段)
  12. matplotlib可视化学习笔记
  13. mvc:annotation-driven/与mvc:default-servlet-handler/之间的一个问题
  14. springboot使用事务原理
  15. Java通过JNI/JNA加载dll库文件调用C接口,出现“java.lang.UnsatisfiedLinkError: no XXX in java.library.path”问题
  16. 深度学习-图解卷积运算
  17. Musical Christmas Lights——一个圣诞树灯光✨随音乐节奏改变的前端开源项目
  18. 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 /返回这三个数的和。
  19. Luckily general gradient for spherical harmonics is defined
  20. TOM、腾讯、网易|你了解大厂企业邮箱的登陆入口吗?

热门文章

  1. 某智能工厂调研、规划、实施整体解决方案
  2. 《计算机应用基础》第四次作业,[业务]计算机应用基础四次小作业
  3. 安装python3.7后报错No module named ‘ufw‘
  4. 评价指标:半峰全宽FWHM(MATLAB Field II仿真)
  5. 网络切片技术缺点_网络切片和服务质量(QoS)有什么区别?
  6. Cooperative Vehicular Content Distribution in Edge Computing Assisted 5G-VANET(5G车联网边缘计算数据开发)
  7. 点击电脑图标,显示电脑界面。点击相同的二维码图标,显示二维码界面(七)
  8. 2020秋招笔试题总结(华为、360、京东、中兴、快手、字节跳动、阿里、拼多多、腾讯、VIVO)~持续更新
  9. Oracle 基础总结:关键字总结
  10. 移动测试Appium安装