Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在visual studio c#windows窗体应用程序中比较来自同一access数据库的数据表_C#_Database_Ms Access_Datatable - Fatal编程技术网

在visual studio c#windows窗体应用程序中比较来自同一access数据库的数据表

在visual studio c#windows窗体应用程序中比较来自同一access数据库的数据表,c#,database,ms-access,datatable,C#,Database,Ms Access,Datatable,我在同一个access数据库中有两个数据表,我需要在两个数据表中使用一个特定的列来比较和输出不匹配的数据。我用过 private void compare_Click(object sender, EventArgs e) { // Something to do with the Initialization of the FirstDataTable and SecondDataTable connection.Open();

我在同一个access数据库中有两个数据表,我需要在两个数据表中使用一个特定的列来比较和输出不匹配的数据。我用过

private void compare_Click(object sender, EventArgs e)
        {
        // Something to do with the Initialization of the FirstDataTable and SecondDataTable   
        connection.Open();
            DataTable dt;

        dt = getDifferentRecords(FirstDataTable, SecondDataTable);

            if (dt.Columns.Count == 0)
                MessageBox.Show("Equal");
            else
                MessageBox.Show("Not Equal");
        }




    public DataTable getDifferentRecords(DataTable FirstDataTable, DataTable SecondDataTable)
        {
        //Create Empty Table   
        DataTable ResultDataTable = new DataTable("ResultDataTable");

            //use a Dataset to make use of a DataRelation object   
            using (DataSet ds = new DataSet())
        {

            //Add tables   
            ds.Tables.AddRange(new DataTable[] { FirstDataTable.Copy(), SecondDataTable.Copy() });

                //Get Columns for DataRelation   
                DataColumn[] firstColumns = new DataColumn[ds.Tables[0].Columns.Count];
                for (int i = 0; i < firstColumns.Length; i++)
                {
                    firstColumns[i] = ds.Tables[0].Columns[i];
                }

                DataColumn[] secondColumns = new DataColumn[ds.Tables[1].Columns.Count];
                for (int i = 0; i < secondColumns.Length; i++)
                {
                    secondColumns[i] = ds.Tables[1].Columns[i];
                }

                //Create DataRelation   
                DataRelation r1 = new DataRelation(string.Empty, firstColumns, secondColumns, false);
                ds.Relations.Add(r1);

                DataRelation r2 = new DataRelation(string.Empty, secondColumns, firstColumns, false);
                ds.Relations.Add(r2);

                //Create columns for return table   
                for (int i = 0; i < FirstDataTable.Columns.Count; i++)
                {
                    ResultDataTable.Columns.Add(FirstDataTable.Columns[i].ColumnName, FirstDataTable.Columns[i].DataType);
                }

                //If FirstDataTable Row not in SecondDataTable, Add to ResultDataTable.   
                ResultDataTable.BeginLoadData();
                foreach (DataRow parentrow in ds.Tables[0].Rows)
                {
                    DataRow[] childrows = parentrow.GetChildRows(r1);
                    if (childrows == null || childrows.Length == 0)
                        ResultDataTable.LoadDataRow(parentrow.ItemArray, true);
                }

                //If SecondDataTable Row not in FirstDataTable, Add to ResultDataTable.   
                foreach (DataRow parentrow in ds.Tables[1].Rows)
                {
                    DataRow[] childrows = parentrow.GetChildRows(r2);
                    if (childrows == null || childrows.Length == 0)
                        ResultDataTable.LoadDataRow(parentrow.ItemArray, true);
                }
                ResultDataTable.EndLoadData();
            }

            return ResultDataTable;
        }
当我再次运行它时,我得到以下错误System.NullReferenceException:“对象引用未设置为对象的实例。”FirstDataTable为null。我该如何解决这个问题,或者是否有其他方法来解决这个问题

多谢各位。 我使用的源代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;

namespace tryout
{
    public partial class Form2 : Form
    {
        private OleDbConnection connection = new OleDbConnection();//setting connection
        public DataTable FirstDataTable;
        public DataTable SecondDataTable;

        public Form2()
        {
            InitializeComponent();
            connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\ndarren\Desktop\Data.accdb;
Persist Security Info=False;";//change this when using different database!

        }


            private void compare_Click(object sender, EventArgs e)
            {
            // Something to do with the Initialization of the FirstDataTable and SecondDataTable   
            connection.Open();
                DataTable dt;

            dt = getDifferentRecords(FirstDataTable, SecondDataTable);

                if (dt.Columns.Count == 0)
                    MessageBox.Show("Equal");
                else
                    MessageBox.Show("Not Equal");
            }




        public DataTable getDifferentRecords(DataTable FirstDataTable, DataTable SecondDataTable)
            {
            //Create Empty Table   
            DataTable ResultDataTable = new DataTable("ResultDataTable");

                //use a Dataset to make use of a DataRelation object   
                using (DataSet ds = new DataSet())
            {

                //Add tables   
                ds.Tables.AddRange(new DataTable[] { FirstDataTable.Copy(), SecondDataTable.Copy() });

                    //Get Columns for DataRelation   
                    DataColumn[] firstColumns = new DataColumn[ds.Tables[0].Columns.Count];
                    for (int i = 0; i < firstColumns.Length; i++)
                    {
                        firstColumns[i] = ds.Tables[0].Columns[i];
                    }

                    DataColumn[] secondColumns = new DataColumn[ds.Tables[1].Columns.Count];
                    for (int i = 0; i < secondColumns.Length; i++)
                    {
                        secondColumns[i] = ds.Tables[1].Columns[i];
                    }

                    //Create DataRelation   
                    DataRelation r1 = new DataRelation(string.Empty, firstColumns, secondColumns, false);
                    ds.Relations.Add(r1);

                    DataRelation r2 = new DataRelation(string.Empty, secondColumns, firstColumns, false);
                    ds.Relations.Add(r2);

                    //Create columns for return table   
                    for (int i = 0; i < FirstDataTable.Columns.Count; i++)
                    {
                        ResultDataTable.Columns.Add(FirstDataTable.Columns[i].ColumnName, FirstDataTable.Columns[i].DataType);
                    }

                    //If FirstDataTable Row not in SecondDataTable, Add to ResultDataTable.   
                    ResultDataTable.BeginLoadData();
                    foreach (DataRow parentrow in ds.Tables[0].Rows)
                    {
                        DataRow[] childrows = parentrow.GetChildRows(r1);
                        if (childrows == null || childrows.Length == 0)
                            ResultDataTable.LoadDataRow(parentrow.ItemArray, true);
                    }

                    //If SecondDataTable Row not in FirstDataTable, Add to ResultDataTable.   
                    foreach (DataRow parentrow in ds.Tables[1].Rows)
                    {
                        DataRow[] childrows = parentrow.GetChildRows(r2);
                        if (childrows == null || childrows.Length == 0)
                            ResultDataTable.LoadDataRow(parentrow.ItemArray, true);
                    }
                    ResultDataTable.EndLoadData();
                }

                return ResultDataTable;
            }




        //core
        private void btn_loadcore_Click(object sender, EventArgs e)
        {
            try
            {
                connection.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                string query = "select * from core";
                command.CommandText = query;
                OleDbDataAdapter da = new OleDbDataAdapter(command);
                DataTable dt2 = new DataTable();
                da.Fill(dt2);
                dataGridView3.DataSource = dt2;
                connection.Close();
            }
            catch (Exception ex)
            {

                MessageBox.Show("Error" + ex);
            }
        }
        //care
        private void btn_loadcare_Click(object sender, EventArgs e)
        {
            try
            {
                connection.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                string query = "select * from care";
                command.CommandText = query;
                OleDbDataAdapter da = new OleDbDataAdapter(command);
                DataTable dt4 = new DataTable();
                da.Fill(dt4);
                dataGridView1.DataSource = dt4;
                connection.Close();
            }
            catch (Exception ex)
            {

                MessageBox.Show("Error" + ex);
            }
        }

        private void prevform_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form1 frm1 =new Form1();
            frm1.ShowDialog();
        }

        private void nextform_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form3 frm3 = new Form3();
            frm3.ShowDialog();
        }

    }

}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用System.Data.OleDb;
命名空间试用
{
公共部分类表单2:表单
{
私有OleDbConnection connection=新OleDbConnection();//设置连接
公共数据表FirstDataTable;
公共数据表SecondDataTable;
公共表格2()
{
初始化组件();
connection.ConnectionString=@“Provider=Microsoft.ACE.OLEDB.12.0;数据源=C:\Users\ndarren\Desktop\Data.accdb;
Persist Security Info=False;“;//在使用其他数据库时更改此选项!
}
私有无效比较\u单击(对象发送者,事件参数e)
{
//与FirstDataTable和SecondDataTable的初始化有关
connection.Open();
数据表dt;
dt=获取不同的记录(第一个数据表,第二个数据表);
如果(dt.Columns.Count==0)
MessageBox.Show(“相等”);
其他的
MessageBox.Show(“不相等”);
}
公共数据表getDifferentRecords(DataTable FirstDataTable、DataTable SecondDataTable)
{
//创建空表
DataTable ResultDataTable=新数据表(“ResultDataTable”);
//使用数据集使用DataRelation对象
使用(数据集ds=新数据集())
{
//添加表
AddRange(新数据表[]{FirstDataTable.Copy(),SecondDataTable.Copy()});
//获取DataRelation的列
DataColumn[]firstColumns=新的DataColumn[ds.Tables[0].Columns.Count];
for(int i=0;iusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;

namespace tryout
{
    public partial class Form2 : Form
    {
        private OleDbConnection connection = new OleDbConnection();//setting connection
        public DataTable FirstDataTable;
        public DataTable SecondDataTable;

        public Form2()
        {
            InitializeComponent();
            connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\ndarren\Desktop\Data.accdb;
Persist Security Info=False;";//change this when using different database!

        }


            private void compare_Click(object sender, EventArgs e)
            {
            // Something to do with the Initialization of the FirstDataTable and SecondDataTable   
            connection.Open();
                DataTable dt;

            dt = getDifferentRecords(FirstDataTable, SecondDataTable);

                if (dt.Columns.Count == 0)
                    MessageBox.Show("Equal");
                else
                    MessageBox.Show("Not Equal");
            }




        public DataTable getDifferentRecords(DataTable FirstDataTable, DataTable SecondDataTable)
            {
            //Create Empty Table   
            DataTable ResultDataTable = new DataTable("ResultDataTable");

                //use a Dataset to make use of a DataRelation object   
                using (DataSet ds = new DataSet())
            {

                //Add tables   
                ds.Tables.AddRange(new DataTable[] { FirstDataTable.Copy(), SecondDataTable.Copy() });

                    //Get Columns for DataRelation   
                    DataColumn[] firstColumns = new DataColumn[ds.Tables[0].Columns.Count];
                    for (int i = 0; i < firstColumns.Length; i++)
                    {
                        firstColumns[i] = ds.Tables[0].Columns[i];
                    }

                    DataColumn[] secondColumns = new DataColumn[ds.Tables[1].Columns.Count];
                    for (int i = 0; i < secondColumns.Length; i++)
                    {
                        secondColumns[i] = ds.Tables[1].Columns[i];
                    }

                    //Create DataRelation   
                    DataRelation r1 = new DataRelation(string.Empty, firstColumns, secondColumns, false);
                    ds.Relations.Add(r1);

                    DataRelation r2 = new DataRelation(string.Empty, secondColumns, firstColumns, false);
                    ds.Relations.Add(r2);

                    //Create columns for return table   
                    for (int i = 0; i < FirstDataTable.Columns.Count; i++)
                    {
                        ResultDataTable.Columns.Add(FirstDataTable.Columns[i].ColumnName, FirstDataTable.Columns[i].DataType);
                    }

                    //If FirstDataTable Row not in SecondDataTable, Add to ResultDataTable.   
                    ResultDataTable.BeginLoadData();
                    foreach (DataRow parentrow in ds.Tables[0].Rows)
                    {
                        DataRow[] childrows = parentrow.GetChildRows(r1);
                        if (childrows == null || childrows.Length == 0)
                            ResultDataTable.LoadDataRow(parentrow.ItemArray, true);
                    }

                    //If SecondDataTable Row not in FirstDataTable, Add to ResultDataTable.   
                    foreach (DataRow parentrow in ds.Tables[1].Rows)
                    {
                        DataRow[] childrows = parentrow.GetChildRows(r2);
                        if (childrows == null || childrows.Length == 0)
                            ResultDataTable.LoadDataRow(parentrow.ItemArray, true);
                    }
                    ResultDataTable.EndLoadData();
                }

                return ResultDataTable;
            }




        //core
        private void btn_loadcore_Click(object sender, EventArgs e)
        {
            try
            {
                connection.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                string query = "select * from core";
                command.CommandText = query;
                OleDbDataAdapter da = new OleDbDataAdapter(command);
                DataTable dt2 = new DataTable();
                da.Fill(dt2);
                dataGridView3.DataSource = dt2;
                connection.Close();
            }
            catch (Exception ex)
            {

                MessageBox.Show("Error" + ex);
            }
        }
        //care
        private void btn_loadcare_Click(object sender, EventArgs e)
        {
            try
            {
                connection.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                string query = "select * from care";
                command.CommandText = query;
                OleDbDataAdapter da = new OleDbDataAdapter(command);
                DataTable dt4 = new DataTable();
                da.Fill(dt4);
                dataGridView1.DataSource = dt4;
                connection.Close();
            }
            catch (Exception ex)
            {

                MessageBox.Show("Error" + ex);
            }
        }

        private void prevform_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form1 frm1 =new Form1();
            frm1.ShowDialog();
        }

        private void nextform_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form3 frm3 = new Form3();
            frm3.ShowDialog();
        }

    }

}