C#-SQLServer-跨库数据同步---字符串链接数据库
2017-12-15 09:46
274 查看
需求:将A数据库中某个表中的几个字段的数据,同步到B数据库中的某个表中思路:从xml文件中读取源数据库的信息,目标数据库的信息,然后字符串连接到数据库,先查询出要插入的数据,再插入到目标数据库
过程:xml配置文件,配置文件如下
<?xml version="1.0" encoding="utf-8" ?> <config> <!--源数据库--> <source_database> <!--源数据库所在服务器--> <source_serveraddr></source_serveraddr> <!--源数据库库名--> <source_databasename></source_databasename> <!--源数据库表名--> <source_tablename></source_tablename> <!--源数据库userId--> <source_uid></source_uid> <!--源数据库password--> <source_pwd></source_pwd> </source_database> <!--目标数据库--> <target_database> <!--目标数据库所在服务器--> <target_serveraddr></target_serveraddr> <!--目标数据库库名--> <target_databasename></target_databasename> <!--目标数据库表名--> <target_tablename></target_tablename> <!--目标数据库userId--> <target_uid></target_uid> <!--目标数据库password--> <target_pwd></target_pwd> </target_database> </config>
后台代码:
public JsonResult DataSynchronized() { string path = Server.MapPath(".."); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(path+"../Interface/Interface.xml");//获取到xml文件的路径 XmlNode root = xmlDoc.SelectSingleNode("config");//读取xml根目录 XmlNode sourceXn = root.SelectSingleNode("source_database");//读取源数据库信息 XmlNode sourceServer = sourceXn.SelectSingleNode("source_serveraddr");//读取源数据库地址 XmlNode sourceDatabasename = sourceXn.SelectSingleNode("source_databasename");//读取源数据库库名 XmlNode sourceTablename = sourceXn.SelectSingleNode("source_tablename");//读取源数据库表名 XmlNode sourceUid = sourceXn.SelectSingleNode("source_uid");//读取源数据库账号 XmlNode sourcePwd = sourceXn.SelectSingleNode("source_pwd");//读取源数据库密码 XmlNode targetXn = root.SelectSingleNode("target_database");//读取目标数据库信息 XmlNode targetServer = targetXn.SelectSingleNode("target_serveraddr");//读取目标数据库地址 XmlNode targetDatabasename = targetXn.SelectSingleNode("target_databasename");//读取目标数据库库名 XmlNode targetTablename = targetXn.SelectSingleNode("target_tablename");//读取目标数据库表名 XmlNode targetUid = targetXn.SelectSingleNode("target_uid");//读取目标数据库账号 XmlNode targetPwd = targetXn.SelectSingleNode("target_pwd");//读取目标数据库密码
//构建链接字符串
string connsqlSource = "server=" + sourceServer.InnerText + ";database=" + sourceDatabasename.InnerText + ";uid=" + sourceUid.InnerText + ";pwd=" + sourcePwd.InnerText; string connsqlTarget = "server=" + targetServer.InnerText + ";database=" + targetDatabasename.InnerText + ";uid=" + targetUid.InnerText + ";pwd=" + targetPwd.InnerText; try { using (SqlConnection connSource = new SqlConnection()) { using (SqlConnection connTarget = new SqlConnection()) { using (var ts = new TransactionScope()) { connSource.ConnectionString = connsqlSource; connSource.Open();//开启源数据库连接 SqlCommand cmd1 = new SqlCommand("这里查询需要插入的数据,", connSource); SqlDataAdapter sda1 = new SqlDataAdapter(); sda1.SelectCommand = cmd1; DataSet ds1 = new DataSet(); sda1.Fill(ds1, "这里自定义一个表名aaa"); connTarget.ConnectionString = connsqlTarget; connTarget.Open(); SqlCommand cmd3 = new SqlCommand("这里查询目标数据库的数据", connTarget); SqlDataAdapter sda3 = new SqlDataAdapter(); sda3.SelectCommand = cmd3; DataSet ds3 = new DataSet(); sda3.Fill(ds3, "bbb"); foreach (DataRow theRow in ds1.Tables["aaa"].Rows) { string sql = "这里根据查询出的源数据条件来删除"; SqlCommand cmd4 = new SqlCommand(sql, connTarget); cmd4.ExecuteNonQuery(); } foreach (DataRow theRow in ds1.Tables["aaa"].Rows) { string sql = "这里用来插入到目标数据库"; SqlCommand cmd = new SqlCommand(sql, connTarget); cmd.ExecuteNonQuery(); } ts.Complete();//提交事务 connSource.Close(); connTarget.Close(); return Json("同步完成!"); } } } } catch(Exception e) { return Json(e.Message); } }
问题:遇到了两个问题
1、xml路径问题
2、插入数据其实可以用insert into table from select * from table这个语句,但是还要判断目标数据库中是否已存在某条数据,而且业务中还需要些判断,可能会效率比较低,所以我就直接删除掉了,这样可能效率高一些
相关文章推荐
- [转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器
- sqlserver 建立跨IP跨数据库查询配置数据链接
- sqlserver 建立跨IP跨数据库查询配置数据链接
- Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform
- sqlserver中不同服务器的数据库数据同步存储过程
- sqlserver 数据同步,无法修改发布数据库表结构
- GeneNomenclatureUtils_download_urls.txt(生物信息学数据库数据下载链接)
- 为什么要引入锁(无论什么数据库软件引入锁的目的都是因数据不一致的三种情况,这里介绍的是MS-SQLSERVER )
- oracle不同数据库表数据同步
- JAVA通过JDBC链接数据库获取数据(一)
- JAVA通过JDBC链接数据库获取数据(二)单元测试增删改查
- solr 简单搭建 数据库数据同步(待续)
- ASP.NET 2.0中的数据库链接字符串的使用方法
- [转载]使用Sqlserver事务发布实现数据同步
- sqlserver 发布前对数据库数据的清空
- Talend open studio数据导入、导出、同步Mysql、oracle、sqlserver简单案例
- [转载]不同服务器数据库之间的数据操作--复制同步(整理版)
- java从数据库中取出数据写到txt或excel,并对字符串操作—取子字符串,删除字符串中某些特殊字符
- 使用Sqlserver事务发布实现数据同步
- 注册表中存储数据库链接字符串的方法