比较2个不同数据库中的2个表

时间:2014-06-15 10:54:46

标签: c# ms-access datagridview

我有2个访问数据库,一个名为revision,另一个名为revision2。每个数据库都有一个名为batch的表。

我有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();
    }
}

任何解决方案,以获得所有匹配和颜色的东西吗?或者更好的想法?

2 个答案:

答案 0 :(得分:0)

你没有遍历读者(博士),你应该找到与当前网格匹配的值。

无论如何,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();
    }

答案 1 :(得分:0)

你可以使用" dataview"检查你的病情

在此示例" tbl2.DefaultView.FindRows"可以提供帮助

    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;
    }