Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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
C#问题:对于我来说,加载.MDB文件、对其进行更改并将更改保存回原始文件的最简单方法是什么?_C#_Datatable_Dataadapter_Ms Jet Ace_Oledbconnection - Fatal编程技术网

C#问题:对于我来说,加载.MDB文件、对其进行更改并将更改保存回原始文件的最简单方法是什么?

C#问题:对于我来说,加载.MDB文件、对其进行更改并将更改保存回原始文件的最简单方法是什么?,c#,datatable,dataadapter,ms-jet-ace,oledbconnection,C#,Datatable,Dataadapter,Ms Jet Ace,Oledbconnection,我正在做的项目几乎完成了。我正在加载一个.MDB文件,在DataGrid上显示内容,并尝试在DataGrid上获取这些更改并将它们保存回.MDB文件。我还将创建一个函数,允许我从一个.MDB文件中获取表并将其保存到另一个.MDB文件中。当然,如果我不知道如何将更改保存回.MDB文件,我就无法执行这些操作 我对谷歌进行了广泛的研究,但我的问题没有答案。我认为自己是这个主题的初学者,所以请不要让答案太复杂——我需要最简单的方式编辑.MDB文件!请提供编程示例 假设我已经连接到DataGrid。如何获

我正在做的项目几乎完成了。我正在加载一个.MDB文件,在DataGrid上显示内容,并尝试在DataGrid上获取这些更改并将它们保存回.MDB文件。我还将创建一个函数,允许我从一个.MDB文件中获取表并将其保存到另一个.MDB文件中。当然,如果我不知道如何将更改保存回.MDB文件,我就无法执行这些操作

我对谷歌进行了广泛的研究,但我的问题没有答案。我认为自己是这个主题的初学者,所以请不要让答案太复杂——我需要最简单的方式编辑.MDB文件!请提供编程示例

  • 假设我已经连接到DataGrid。如何获取Datagrid所做的更改?我相信这个答案很简单
  • 然后,我需要知道如何获取这个数据表,将其插入数据集,然后获取该数据集并重写.MDB文件。(如果有一种只插入已更改的表的方法,我更愿意这样做。)
  • 提前谢谢你,如果你需要更多信息,请告诉我。这是关于这个话题我可能要问的最后一件事…感谢上帝

    编辑:

    static public void performSynchronization(string table, string tableTwoLocation)
    {
        OleDbCommand cmdCopyTables = new OleDbCommand("INSERT INTO" + table + "SELECT * FROM [MS Access;" + tableTwoLocation + ";].[" + table + "]"); // This query generates runtime error
        cmdCopyTables.Connection = dataconnectionA;
        dataconnectionA.Open();
        cmdCopyTables.ExecuteNonQuery();
        dataconnectionA.Close();
    }
    
    我正在使用的.mdb是Microsoft Access数据库。(我甚至不知道有多个.mdb文件)

    我知道我不能通过streamwriter或其他任何方式直接写入.MDB文件,但是有没有办法生成一个包含数据集信息的.MDB文件?或者,是否有一种方法可以将表添加到已加载到DataGrid的.MDB文件中。一定有办法

    同样,我需要一种在C#中以编程方式执行此操作的方法

    编辑:

    static public void performSynchronization(string table, string tableTwoLocation)
    {
        OleDbCommand cmdCopyTables = new OleDbCommand("INSERT INTO" + table + "SELECT * FROM [MS Access;" + tableTwoLocation + ";].[" + table + "]"); // This query generates runtime error
        cmdCopyTables.Connection = dataconnectionA;
        dataconnectionA.Open();
        cmdCopyTables.ExecuteNonQuery();
        dataconnectionA.Close();
    }
    
    好的,我的项目相当大,但我使用一个单独的类文件来处理所有数据库连接。我知道我的设计和来源是非常草率的,但它完成了工作。我只和我在网上找到的例子一样好

    记住,我只是以另一种形式连接到数据网格。如果您想从Datagrid表单获取我的代码,请告诉我(我不知道您为什么需要它)。DatabaseHandling.cs处理2.MDB文件。因此,您将在其中看到两个数据集。我最终将使用它从一个数据集中获取表,并将它们放入另一个数据集中。我只需要找出如何将这些值保存回.MDB文件

    有什么办法可以这样做吗?一定有办法

    编辑:

    static public void performSynchronization(string table, string tableTwoLocation)
    {
        OleDbCommand cmdCopyTables = new OleDbCommand("INSERT INTO" + table + "SELECT * FROM [MS Access;" + tableTwoLocation + ";].[" + table + "]"); // This query generates runtime error
        cmdCopyTables.Connection = dataconnectionA;
        dataconnectionA.Open();
        cmdCopyTables.ExecuteNonQuery();
        dataconnectionA.Close();
    }
    
    从我的研究和阅读来看……我认为答案就在我眼皮底下。使用“Update()”命令。现在,虽然这再次保证了实际上有一种简单的方法可以做到这一点,但我仍然有一个问题,那就是我根本不知道如何使用这个update命令

    也许我可以这样设置:

    Oledb.OledbConnection cn = new Oledb.OledbConnection(); 
    cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Staff.mdb"; 
    Oledb.OledbCommand cmd = new Oledb.OledbCommand(cn); 
    cmd.CommandText = "INSERT INTO Customers (FirstName, LastName) VALUES (@FirstName, @LastName)"; 
    
    我想这样做可以,但我不想手动插入任何内容。我想做这两件事:

    • 获取在Datagrid上更改的信息,并更新从中获取的Access数据库文件(.mdb)
    • 创建一个函数,允许我从另一个Access数据库文件(.mdb)中获取表,并将其替换到辅助Access数据库文件(.mdb)中。两个文件将使用完全相同的结构,但其中包含不同的信息
    我希望有人能给我一个答案…我的项目完成了所有等待的只是一个简单的答案

    提前再次感谢您

    编辑:

    static public void performSynchronization(string table, string tableTwoLocation)
    {
        OleDbCommand cmdCopyTables = new OleDbCommand("INSERT INTO" + table + "SELECT * FROM [MS Access;" + tableTwoLocation + ";].[" + table + "]"); // This query generates runtime error
        cmdCopyTables.Connection = dataconnectionA;
        dataconnectionA.Open();
        cmdCopyTables.ExecuteNonQuery();
        dataconnectionA.Close();
    }
    
    好的,好消息。我想我已经知道了如何查询.mdb文件本身。下面是代码,它不起作用,因为我尝试使用的sql命令导致运行时错误。这将引出我的下一个问题

    添加到DatabaseHandling.cs的新功能代码:

    static public void performSynchronization(string table, string tableTwoLocation)
    {
        OleDbCommand cmdCopyTables = new OleDbCommand("INSERT INTO" + table + "SELECT * FROM [MS Access;" + tableTwoLocation + ";].[" + table + "]"); // This query generates runtime error
        cmdCopyTables.Connection = dataconnectionA;
        dataconnectionA.Open();
        cmdCopyTables.ExecuteNonQuery();
        dataconnectionA.Close();
    }
    
    正如您所看到的,我实际上已经设法对连接本身执行了一个查询,我认为这是实际的Access.MDB文件。正如我所说的,我对该文件执行的SQL查询不起作用,在使用时生成了一个运行时错误

    我试图执行的命令应该是从.MDB文件中获取一个表,并覆盖另一个.MDB文件中相同类型的表。我在上面尝试的SQL命令试图直接从.mdb文件中获取一个表,然后直接将其放入另一个表中——这不是我想要做的。我想从.MDB文件中获取所有信息——将表放入Datatable,然后将所有Datatable添加到Dataset(我已经完成了)。我想对两个.MDB文件执行此操作。有了两个数据集后,我希望从每个数据集中提取特定的表,并将它们添加到每个文件中,如下所示:

    Oledb.OledbConnection cn = new Oledb.OledbConnection(); 
    cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Staff.mdb"; 
    Oledb.OledbCommand cmd = new Oledb.OledbCommand(cn); 
    cmd.CommandText = "INSERT INTO Customers (FirstName, LastName) VALUES (@FirstName, @LastName)"; 
    
    • 数据集>>>>----[添加表 (覆盖它们)]------>>>>>数据集B
    • 数据集B>>>>----[添加表 (覆盖它们)]------>>>>>数据集
    我想获取这些数据集,然后将它们放回它们来自的每个Access.MDB文件中。基本上保持两个数据库同步

    因此,我的问题是:

  • 如何创建一个SQL查询,通过覆盖相同名称的现有表,将表添加到.MDB文件中。查询应该能够在运行时使用数组动态创建,该数组用我要添加的表名替换变量
  • 如何获取Datagrid对DataTable所做的更改,并将其放回DataTable(或DataSet),以便将其发送到.MDB文件
  • 我已经尽可能详细地阐述了……因为我认为我没有很好地解释我的问题。现在这个问题变得太长了。我只希望我能更好地解释这一点[

    编辑:

    static public void performSynchronization(string table, string tableTwoLocation)
    {
        OleDbCommand cmdCopyTables = new OleDbCommand("INSERT INTO" + table + "SELECT * FROM [MS Access;" + tableTwoLocation + ";].[" + table + "]"); // This query generates runtime error
        cmdCopyTables.Connection = dataconnectionA;
        dataconnectionA.Open();
        cmdCopyTables.ExecuteNonQuery();
        dataconnectionA.Close();
    }
    
    多亏了下面的一位用户,我想我几乎找到了一个解决方案——钥匙