将SQL Server的数据实时同步到MYSQL(小白实操制作,详细记录)。一:SQL Server与数据库的连接

SQL Server与MYSQL的数据实时同步


由于实验室项目需要,需要将老系统的存在SQL Server上的数据同步到MYSQL数据库中。就从网上学习了一下。以此作为一个记录:

操作系统与软件版本
电脑系统为win10,64位。MYSQL为5.7版本。SQL Server 2014

一:SQL Server与数据库的连接

(1)安装ODBC数据管理程序64位。
链接:https://download.csdn.net/download/qq_39912781/12515407
(2)直接电脑开始中搜索 “ODBC”,找到ODBC数据源(64位)。打开,如下图所示,点击“系统DSN”
ODBC界面
(3)点击“添加”按钮
在这里插入图片描述
(4)添加系统数据源,进行Test测试,成功后进行连接(此处虽然选择测试是一个数据库,但实际将本地MYSQL数据库地址全部添加)

在这里插入图片描述
(5)SQL Server2014中新建连接服务器(用代码创建)

在这里插入图片描述

exec sp_addlinkedserver
@server = 'MySqll_Aggregation',  -- --Connector ODBC里面填写的data source name
@srvproduct = 'MySql',--随便填写
@provider = 'MSDASQL',-- --固定这个MSDASQL 是用于连接到 ODBC(而不是数据库)的 OLEDB 访问接口。
@datasrc='MySqll_Aggregation',@location=NULL,
--@provstr='DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=127.0.0.1;DATABASE=qssf_main;UID=root;PORT=3306;',--配置的内容此项配置@datasrc二者只需有一个配置即可
@catalog=NULL

点击执行。

(6)创建连接mysql数据库的账号及密码(用代码创建)

exec sp_addlinkedsrvlogin
@rmtsrvname='MySqll_Aggregation', ----ODBC里面data source name
@useself = 'false',
@rmtuser='root',---mysql账号
@rmtpassword='root'---mysql密码

(7)测试是否连接成功

select * from openquery(MySqll_Aggregation,'SELECT * FROM qssf_main.a_companybasicinfo; ')

如果连接成功的话,就会返回表的内容了。(qssf_main.a_companybasicinfo是我MYSQL中的库表)
在这里插入图片描述

此处OPENQUERY函数相当于是一个表名,你在SQL SERVER中可以对其进行增删改查的操作。此处好像只能增删改查,别的就不行了,请高手指教一下

  • openquery解释:
  • 对给定的链接服务器执行指定的传递查询。该服务器是 OLE DB 数据源。OPENQUERY 可以在查询的 FROM 子句中引用,就好像它是一个表名 。OPENQUERY 也可以作为 INSERT、UPDATE 或 DELETE的语句的目标
    表进行引用。但这要取决 于 OLE DB 访问接口的功能。尽管查询可能返回
    多个结果集,但是 OPENQUERY 只返回第一个。

OPENQUERY(linked_server,’query’)
Linked_server表示链接服务器名称的标识符。‘query’为查询语句

此是第一部分。接下来会记录一下我的一些存储过程,实际项目,参考意义可能不是太大的。

相关推荐
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; using System.Data.SqlClient; using System.Text; using MySql.Data; using MySql.Data.MySqlClient; //本程序的功能是实时mysql中读取一条记录中的一个字段,插入到sqlserver 中,经过长时间的运行,基本无错了, 而这数据同步,目前没有实时性强的软件,至少1分钟,太久了,自己写了一个, //可以自己设置同步时间,字符连接串等,给了源码,而且对程序进行了很多优化 容错性很强,懂点程序的 就可以直接修改源码 就可以用了。由于没有时间按做界面,只能自己修改了,不过已经很稳定了,为了给大家提供点方便,免得还去查大量的资料。 namespace tool { public partial class Form1 : Form { public string mysql_Conn = "Database='cmccbbs';Data Source='211.139.22.124';UserId='cmcc';Password='CMCC2014cmcc2014';charset='utf8';pooling=true"; public string mysql_sql = "select max(id) from pre_sms_tempsend"; // public string sql_server_Conn = "Data Source=lei; DataBase=test; User=sa;PWD=123456"; 211.222.229.124 public string id, phone, verify, last_id; SqlConnection my_sql_con; MySqlConnection con; MySqlCommand cmd; DataSet ds; public string sql_server_Conn = "Data Source=222.85.144.112,14444; DataBase=DB_CustomSMS; User=sms;PWD=sms2014"; // public string sql_sql = "select max(id) from pre_sms_tempsend"; MySqlDataAdapter md; public int ii = 0; public Form1() { InitializeComponent(); timer1.Interval = 1000; //连接mysql con = new MySql.Data.MySqlClient.MySqlConnection(mysql_Conn); con.Open(); cmd = new MySqlCommand("select * from pre_sms_tempsend order by id desc limit 1", con); cmd.Connection = con; md = new MySqlDataAdapter(); ds = new DataSet(); //这样做避免一直new,导致内存泄露 } private void button1_Click(object sender, EventArgs e) { if (button1.Text == "start") { timer1.Enabled = true; button1.Text = "stop"; } else { timer1.Enabled = false; button1.Text = "start"; } } private void timer1_Tick(object sender, EventArgs e) { try { // //设置一个判断,当此次和上次产生的严重 if (con.State != ConnectionState.Open) { con.Open(); } md.SelectCommand = cmd; md.Fill(ds, "pre_sms_tempsend"); foreach (DataRow testRow in ds.Tables["pre_sms_tempsend"].Rows) { id = testRow["id"].ToString(); phone = testRow["mobile"].ToString(); verify = testRow["content"].ToString(); } if (con.State != ConnectionState.Closed) { con.Close(); } if (id != last_id) { //初始化sql 连接 my_sql_con = new SqlConnection(sql_server_Conn); my_sql_con.Open(); SqlCommand sqlcom = new SqlCommand("insert into oa_smsend( Mobile,Content) values('" + phone + "','" + verify + "') ", this.my_sql_con); sqlcom.ExecuteNonQuery(); last_id = id; my_sql_con.Close(); } } catch (Exception ex) { throw ex ; } } } }
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页