2014-06-15 3 views
2

revision이라는 액세스 데이터베이스 2 개와 revision2이라는 2 개의 액세스 데이터베이스가 있습니다. 각 데이터베이스에는 batch이라는 테이블이 있습니다.2 개의 다른 데이터베이스에서 2 개의 테이블을 비교하십시오

나는 첫 번째 데이터베이스의 데이터를 표시하는 DataGridView이 있습니다.

서로 다른 데이터베이스의 2 개 테이블을 비교해야하는데 일치하는 것이 DataGridView에 녹색으로 표시됩니다.

는 그 코드를 사용하지만 색상 만 첫 경기 모든,

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\revision.accdb"); 
    OleDbConnection con2 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\revision2.accdb"); 
    OleDbCommand cmd = new OleDbCommand("select * From batch", con); 
    OleDbCommand cmd2 = new OleDbCommand("select * From batches", con2); 
    con.Open(); 
    con2.Open(); 
    OleDbDataReader dr = cmd.ExecuteReader(); 
    OleDbDataReader dr2 = cmd2.ExecuteReader(); 
    dr.Read(); 
    dr2.Read(); 
    DataTable dt = new DataTable(); 
    dt.Columns.Add("batch_no"); 
    if (dr["batch_no"].ToString() == dr2["batch_no"].ToString()) 
    { 
     string num = dr["batch_no"].ToString(); 
     foreach (DataGridViewRow myrow in dataGridView1.Rows) 
     { 
      if (Convert.ToString(myrow.Cells[0].Value) == num) 
      { 
       myrow.DefaultCellStyle.BackColor = Color.Green; 
      } 
      else 
      { 

      } 
     } 
     con.Close(); 
     con2.Close(); 
    } 
} 

모든 솔루션은 무슨 일이 일치하는 것을 모두 얻을과 색상을? 또는 더 좋은 아이디어?

+0

@MitchWheat 이러한 redgate 도구는 필요에 따라 compare2 rdbms 테이블을 실행하기 위해 API를 제공합니까? –

답변

0

당신은 현재 표와 일치하는 값을 찾을 것으로 예상되는 독자 (dr)를 반복하지 않았습니다.

어쨌든 DataTable과 다른 리더 (dr2)는 무엇입니까?

빠른 수정이, 아직 테스트하지 :

if (dr["batch_no"].ToString() == dr2["batch_no"].ToString()) 
    { 
     while (dr.Read()) 
     { 
      string num = dr.GetString(dr.GetOrdinal("batch_no")); //dr["batch_no"].ToString(); 
      foreach (DataGridViewRow myrow in dataGridView1.Rows) 
      { 
       if (Convert.ToString(myrow.Cells[0].Value) == num) 
       { 
        myrow.DefaultCellStyle.BackColor = Color.Green; 
       } 
       else 
       { 

       } 
      } 
     } 

     con.Close(); 
     con2.Close(); 
    } 
+0

결과로 데이터 테이블을 채우려 고했지만 실패한 데이터는 –

+0

이고 두 번째 데이터베이스는 dr2가 데이터를로드합니다. –

0

는 u는이 샘플에서 "tbl2.DefaultView.FindRows를"당신의 상태

을 확인하기 위해 "DataView를"를 사용할 수 있습니다 도움이 될 수 있습니다

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\revision.accdb"); 
    OleDbConnection con2 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\revision2.accdb"); 
    OleDbCommand cmd = new OleDbCommand("select * From batch", con); 
    OleDbCommand cmd2 = new OleDbCommand("select * From batches", con2); 
    con.Open(); 
    con2.Open(); 
    OleDbDataReader dr = cmd.ExecuteReader(); 
    OleDbDataReader dr2 = cmd2.ExecuteReader(); 

    DataTable tbl1 = new DataTable(); 
    tbl1.Load(dr); 

    DataTable tbl2 = new DataTable(); 
    tbl1.Load(dr2); 

    dataGridView1.DataKeyNames = new string[] { "batch_no" }; 
    dataGridView1.DataSource = tbl1; 
    dataGridView1.DataBind(); 


    for (int i = 0; i < dataGridView1.Rows.Count; i++) 
    { 
     if (tbl2.DefaultView.FindRows(dataGridView1.DataKeys[i].Value).Length > 0) 
      dataGridView1.Rows[i].BackColor = Color.Green; 
    } 
관련 문제