C#-SQLServer-跨库数据同步---字符串链接数据库
来源:互联网 发布:两个ip指向一个域名 编辑:程序博客网 时间:2024/06/07 10:20
需求:将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这个语句,但是还要判断目标数据库中是否已存在某条数据,而且业务中还需要些判断,可能会效率比较低,所以我就直接删除掉了,这样可能效率高一些
阅读全文
0 0
- C#-SQLServer-跨库数据同步---字符串链接数据库
- sqlserver 建立跨IP跨数据库查询配置数据链接
- MYSQL同步Sqlserver数据库数据的方法
- 跨数据库链接查询-sqlserver
- C#.NET数据库链接字符串
- SqlServer数据库同步 两张表的数据 去除重复数据
- VC链接sqlserver字符串
- SqlServer链接字符串整理
- sqlserver 链接数据库
- SQLServer链接数据库操作
- SQLSERVER链接ORACLE数据库
- openfire 链接sqlserver数据库
- sqlserver链接数据库
- Java链接SqlServer数据库
- JDBC链接sqlserver数据库
- SQLServer添加数据库链接
- JDBC链接SQLServer数据库
- qt链接sqlserver数据库
- WAMP服务器和远程访问配置
- 安卓200道面试题
- [Python]
- DateUtil 工具类
- Redis 分布式锁的正确实现方式( Java 版 )[转]
- C#-SQLServer-跨库数据同步---字符串链接数据库
- 谈一谈Go的接口interface的使用方法
- [Python]
- 如何录入百万测试数据
- There are no enabled repos.
- 【云计算】云计算、雾计算、边缘计算到底是怎么回事?
- ZooKeeper的安装与部署
- 【人工智能】2017年度人工智能报告:7大行业应用,100个初创企业
- [Python]