C#问题:对于我来说,加载.MDB文件、对其进行更改并将更改保存回原始文件的最简单方法是什么?
我正在做的项目几乎完成了。我正在加载一个.MDB文件,在DataGrid上显示内容,并尝试在DataGrid上获取这些更改并将它们保存回.MDB文件。我还将创建一个函数,允许我从一个.MDB文件中获取表并将其保存到另一个.MDB文件中。当然,如果我不知道如何将更改保存回.MDB文件,我就无法执行这些操作 我对谷歌进行了广泛的研究,但我的问题没有答案。我认为自己是这个主题的初学者,所以请不要让答案太复杂——我需要最简单的方式编辑.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。如何获
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>>>>----[添加表 (覆盖它们)]------>>>>>数据集
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();
}
多亏了下面的一位用户,我想我几乎找到了一个解决方案——钥匙