我正在编写一个简单的报表工具,需要将数据从一个Access数据库中的表移动到另一个Access数据库中的表(表结构相同)。但是,我是C#的新手,我发现很难找到可靠的解决方案。
任何指针都会非常感激。
答案 0 :(得分:1)
Access SQL支持使用IN子句指定表位于不同的数据库中。以下C#代码从Database1.accdb
中名为[YourTable]的表中选择行,并将它们插入Database2.accdb
中名为[YourTable]的现有表(具有相同结构):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
namespace oleDbTest
{
class Program
{
static void Main(string[] args)
{
string myConnectionString;
myConnectionString =
@"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data Source=C:\Users\Public\Database1.accdb;";
using (var con = new OleDbConnection())
{
con.ConnectionString = myConnectionString;
con.Open();
using (var cmd = new OleDbCommand())
{
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText =
@"INSERT INTO YourTable IN 'C:\Users\Public\Database2.accdb' " +
@"SELECT * FROM YourTable WHERE ID < 103";
cmd.ExecuteNonQuery();
}
con.Close();
}
Console.WriteLine("Done.");
}
}
}
答案 1 :(得分:1)
很多方式。
0)如果只有一次,请复制并粘贴表格。
1)如果要在Access中执行此操作,最简单的方法是在新数据库中创建链接表,然后在新数据库中创建生成表查询。
2)您可以直接引用第二个表格。 选择 * FROM TableInDbX IN'C:\ SomeFolder \ DB X';
3)在宏中,您可以使用DoCmd对象的TransferDatabase方法链接相关表,然后运行合适的追加和更新查询以进行同步。
4)VBA http://www.techonthenet.com/access/questions/new_mdb.php
答案 2 :(得分:0)
给定列名Col1
,Col2
和Col3
:
private static void Migrate(string dbConn1, string dbConn2) {
// DataTable to store your info into
var table = new DataTable();
// Modify your SELECT command as needed
string sqlSelect = "SELECT Col1, Col2, Col3 FROM aTableInOneAccessDatabase ";
// Notice this uses the connection string to DB1
using (var cmd = new OleDbCommand(sqlSelect, new OleDbConnection(dbConn1))) {
cmd.Connection.Open();
table.Load(cmd.ExecuteReader());
cmd.Connection.Close();
}
// Modify your INSERT command as needed
string sqlInsert = "INSERT INTO aTableInAnotherAccessDatabase " +
"(Col1, Col2, Col3) VALUES (@Col1, @Col2, @Col3) ";
// Notice this uses the connection string to DB2
using (var cmd = new OleDbCommand(sqlInsert, new OleDbConnection(dbConn2))) {
// Modify these database parameters to match the signatures in the new table
cmd.Parameters.Add("@Col1", DbType.Int32);
cmd.Parameters.Add("@Col2", DbType.String, 50);
cmd.Parameters.Add("@Col3", DbType.DateTime);
cmd.Connection.Open();
foreach (DataRow row in table.Rows) {
// Fill in each parameter with data from your table's row
cmd.Parameters["@Col1"].Value = row["Col1"];
cmd.Parameters["@Col2"].Value = row["Col2"];
cmd.Parameters["@Col3"].Value = row["Col3"];
// Insert that data
cmd.ExecuteNonQuery();
}
cmd.Connection.Close();
}
}
现在,我不经常使用Access数据库,因此您可能需要调整一些内容。
但是,这应该可以帮助你顺利完成任务。如果我没记错,Access不会关注您的OleDbParameter名称!您可以随意调用它们,实际上大多数人只使用问号?
作为参数字段。
因此,您必须按照语句调用它们的顺序添加和更新这些参数。
那么,为什么我将参数命名为@Col1
,@Col2
,@Col3
?在这里,它只是帮助您和我了解每个参数要映射到的位置。进入也是一种很好的做法。如果您迁移到更好的数据库,希望它会注意参数的名称。