【问题标题】:Comparing two tables one is mysql db and one is MSSQL db比较两张表,一张是mysql db,一张是MSSQL db
【发布时间】:2011-12-30 13:46:54
【问题描述】:

我正在 C# 中执行以下语句。 有两个表订单,数据。 Orders 是一个 mysql 数据库。 数据是 MSSQL 数据库。

insert into orders (orders_id, customers_id, customers_cid, customers_vat_id, customers_name, customers_email_address)
select
    o.*
from
    Test.dbo.orders o
where
    not exists (
        select 1
        from
            CobraDemoData.dbo.Data a
        where
            a.email0 = o.customers_email_address
    )

我已经为两个数据库创建了连接字符串

MySqlConnection sqlConn = new MySqlConnection("server=localhost;User Id=root;Password = 123456;Persist Security Info=True;database=xtcommerce";)

SqlConnection con1 = new SqlConnection(@"Data Source=SUBASH-LAPTOP\COBRA;Initial Catalog=CobraDemoData;Integrated Security=True");

你能告诉我下一步该怎么做吗?

任何帮助将不胜感激.. 谢谢, 子巴什....

【问题讨论】:

  • 除非 MSSQL 或 mySQL 在其数据库中包含链接表,否则您将无法使用所需的方法进行更新。您要么必须从一个获取所有记录,然后通过更新另一个进行循环,使用 LINQ 管理不同数据库之间的连接,或者从一个导出,导入到 temp 中,然后再插入 temp。这不是一个答案,因为我不知道如何实现,我只知道这些是一些更常见的选项。原因:一个连接不能连接两个数据库。
  • 如果这是一个一次性类型的项目,您还可以将 MySQL 数据导入 MSSQL 服务器的表中并从那里开始工作。这样您就可以对数据等进行连接。如果这是长期项目的要求,请忽略此建议。

标签: c# mysql sql-server


【解决方案1】:

打开两个阅读器,查询两个表按相同键排序,并逐行进行比较,类似这样,(假设有两个连接 - mssql 和 mysql: p>

var sc1 = mssql.CreateCommand();
var sc2 = mysql.CreateCommand();
sc1.CommandText = sc2.CommandText = "select id, name, email, phone from yourtable ORDER BY Id";
sc1.CommandTimeout = sc2.CommandTimeout = 0;

            using (var r1 = sc1.ExecuteReader())
            {
                using (var r2 = sc2.ExecuteReader())
                {
                    while (true)
                    {
                        bool read1 = r1.Read();

                        if (read1 ^ r2.Read())
                            throw new Exception("Doesn't match!");

                        if(!read1) {Console.WriteLine("MATCH!!!"); break;}

                        for (int i = 0; i < r1.FieldCount; i++)
                        {
                            if (r1.IsDBNull(i) ^ r2.IsDBNull(i))
                                throw new Exception("Doesn't match!");

                            if (string.Compare(r1[i].ToString(), r2[i].ToString(), StringComparison.InvariantCultureIgnoreCase) != 0)
                                throw new Exception("Doesn't match!");

                        }
                    }
                }
            }

然后您可以根据此示例实现更新逻辑。

但是

必须有一些独特的字段,用于标识两个表中的行

【讨论】:

    猜你喜欢
    • 2017-04-26
    • 2011-10-08
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2017-09-01
    相关资源
    最近更新 更多