我有两个几乎相同的数据库(都是*.mdb),但其中一个有很少的新表.现在,我只能使用以下代码检测应导入的表:
public static ListGetDBTables(string path) { List allTables = new List (); String connect = ("Provider=Microsoft.JET.OLEDB.4.0;data source=" + path + ";Persist Security Info=False;"); OleDbConnection con = new OleDbConnection(connect); con.Open(); DataTable tables = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); int counter = 1; foreach (DataRow row in tables.Rows) { allTables.Add(row[2].ToString()); counter++; } con.Close(); return allTables; } var withNewTables = GetDBTables(".\\one.mdb"); var withoutNewTables = GetDBTables(".\\another.mdb"); var NotFoundTables = withNewTables.Except(withoutNewTables).ToList();
如何使用C#在旧数据库中导入这些表?
Access SQL提供了两个在这里很有用的功能.
SELECT <field list> INTO NewTable
FROM table_name IN 'path to other db file'
所以,我可以从一个OLEDB连接到我的目标DB文件来执行这个语句,它会创建tblFoo_copy从包含在数据tblFoo在其他数据库文件,NewData.mdb.
SELECT f.* INTO tblFoo_copy
FROM tblFoo AS f IN 'C:\Users\hans\Documents\NewData.mdb';
为要导入的每个表构建并执行类似的语句.