Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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# 使用C将表从一个MS Access数据库传输到另一个数据库_C#_Ms Access - Fatal编程技术网

C# 使用C将表从一个MS Access数据库传输到另一个数据库

C# 使用C将表从一个MS Access数据库传输到另一个数据库,c#,ms-access,C#,Ms Access,我有两个几乎相同的数据库,它们都是*.mdb,但其中一个几乎没有新表。现在,我只能使用以下代码检测应导入的表: public static List<string> GetDBTables(string path) { List<string> allTables = new List<string>(); String connect = ("Provider=Microsoft.JET.OLEDB.4.0;d

我有两个几乎相同的数据库,它们都是*.mdb,但其中一个几乎没有新表。现在,我只能使用以下代码检测应导入的表:

    public static List<string> GetDBTables(string path)
    {
        List<string> allTables = new List<string>();
        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提供了两个有用的功能

选择新表格 从“到其他数据库文件的路径”中的表_name 因此,我可以从OleDb连接到目标db文件执行此语句,它将从另一个db文件NewData.mdb中tblFoo中包含的数据创建tblFoo_拷贝

选择f.*进入tblFoo\U副本 来自tblFoo,作为“C:\Users\hans\Documents\NewData.mdb”中的f;
为每个要导入的表生成并执行类似的语句。

好吧,除了HansUp answer之外,我还将在C上发布该语句的实现:

public static void insertTables(string path_from, string path_to, 
                                                            List<string> _tables)
{
    string conString = ("Provider=Microsoft.JET.OLEDB.4.0;data source=" 
                                    + path_to + ";Persist Security Info=False;");
    OleDbConnection dbconn = new OleDbConnection(conString);
    dbconn.Open();
    OleDbCommand dbcommand = new OleDbCommand();

    _tables.ForEach(delegate(String name)
    {
        string selQuery = "SELECT f.* INTO " + name + " FROM " + name 
                                               + " AS f IN '" + path_from + "';";

        dbcommand.CommandText = selQuery;
        dbcommand.CommandType = CommandType.Text;
        dbcommand.Connection = dbconn;
        int result = dbcommand.ExecuteNonQuery();
    });

    dbconn.Close();
}

insertTables(".\\one.mdb", ".\\another.mdb", NotFoundTables);