是否可以通过编程方式将一个数据库中的所有表复制到另一个可能已包含表的数据库中(如果有任何重复的名称,则会抛出异常)?这意味着在目标数据库中使用适当的结构创建表,并使用与源数据库相同的名称。
我发现了一些类似的问题,但没有一个有这个特殊需要。
我正在使用Jet引擎。
答案 0 :(得分:0)
找到解决方案:
string query = "SELECT * INTO [dest_table] FROM [source_table] IN '" + sourceDataBaseFileName + "'";
using (OleDbCommand sqlCeCommand = new OleDbCommand(query, DbConnection))
{
sqlCeCommand.ExecuteNonQuery();
}
对源中的每个表执行此操作。 source_table
和dest_table
可以是同一个名称。 DbConnection
是目标数据库。
答案 1 :(得分:0)
我意识到这是一个老问题。也许这个答案会帮助别人。
操纵Microsoft Access的COM接口似乎提供了您正在寻找的大部分内容。
在VB.Net中,它是这样的:
acdb = New Microsoft.Office.Interop.Access.Application
acdb.OpenCurrentDatabase("source db")
acdb.DoCmd.CopyObject("target db", "target table name", Microsoft.Office.Interop.Access.AcObjectType.acTable, "source table name")
acdb.CloseCurrentDatabase()
我验证了表格是否正确复制,具有正确的列类型,索引和键。但是,如果目标表已经存在而没有任何警告或例外,它似乎会覆盖目标表。
有关详细信息,请参阅此MSDN link。
当我研究如何做到这一点时,我误解了我读到的内容,因为我认为这是DAO。自从我使用DAO以来已经很长时间了,所以我没有意识到我的错误。谢谢Gord Thompson让我直截了当。
这确实需要在正在运行的计算机上安装MSACCESS。更复杂的方法是使用ADOX,它也有自己的缺点恕我直言。
这适用于Office 2010.显然是YMMV与其他版本。
如果只有一天微软开始使用.Net for Office,因为它们告诉世界其他国家要做。