比较两个表并使用mysql和c#将不匹配的记录插入到另一个表中

时间:2015-08-20 14:19:49

标签: c# mysql

我有两个表A和B具有相同的列和结构我想比较两个表并将表B中的非匹配记录插入到另一个表中。我在用 C#和MYSql。

            cnn.Open();

            string Csql1 = "SELECT FILE_NAME, passport_number, applicant_name, applicant_dob, applicant_gender,issue_date, visa_number, fh_name, application_date, rowid FROM Data_Before_QC ORDER BY old_name ASC LIMIT 1";
            da1 = new MySqlDataAdapter(Csql1, cnn);
            da1.Fill(dt1);
            //string[] arr1 = new string[dt1.Rows.Count];

            string Csql2 = "SELECT FILE_NAME, passport_number, applicant_name, applicant_dob,applicant_gender,issue_date,visa_number, fh_name, application_date, rowid FROM Data_Afetr_QC ORDER BY old_name ASC LIMIT 1";
            da2 = new MySqlDataAdapter(Csql2, cnn);
            da2.Fill(dt2);


            foreach (DataRow row1 in dt1.Rows)
            {
                foreach (DataRow row2 in dt2.Rows)
                {

                }
            }

2 个答案:

答案 0 :(得分:0)

你需要这样的东西:

      string[] fields = new string[]{

                                "passport_number",
                                "applicant_name",
                                //and so on you should write all of your columns which you wanna update.
                            };

      foreach (DataRow sourceRow in dt1.Rows)
      {
           var searchResult = from dRow in dt2.AsEnumerable()
                              where dRow["FILE_NAME"].Equals(sourceRow["FILE_NAME"])
           select dRow;

           if(!searchResult.Any())
               continue;



           foreach(string columnName in fields)
           {
               searchResult[columnName] = sourceRow[columnName];
           } 

      }

请注意,这不会更新丢失的记录。为此你需要另外一个插入 @Richard 在评论中写下你如何。要使此代码生效,您需要添加using System.Linq;。此外,我想您正在使用FILE_NAME来复制记录。

如果您认真考虑这样做,还有适合此类工作的工具。如果您无法负担工具而又想要更新少量表格,请查看Microsoft SMO。关于SMO,请注意性能不佳!

P.S下一次在问题上付出更多努力,在另一种情况下可能没有人会回答你!当你循环表时,想想要做什么并不难。

代码是即时构建的,因此可能会出错!

答案 1 :(得分:0)

更好地编辑像这样的SQL查询

SELECT * FROM(
    SELECT FILE_NAME, passport_number, applicant_name, applicant_dob, applicant_gender,issue_date, visa_number, fh_name, application_date, rowid FROM Data_Before_QC ORDER BY old_name ASC LIMIT 1
    EXCEPT
    SELECT FILE_NAME, passport_number, applicant_name, applicant_dob,applicant_gender,issue_date,visa_number, fh_name, application_date, rowid FROM Data_Afetr_QC ORDER BY old_name ASC LIMIT 1) tmp

注意:代码未经过测试