compact肯定是不对的,看来你没有查查英文字典这个词的意思是什么。要有修复功能(当然有啦),也应该写为repair之类的!实际上,不管数据库文件有没有损坏,每当进程启动时都应该去修复数据库。Jet引擎的数据库文件及其容易损坏,当你让一个程序修改数据,然后立刻终止进程(或者遇到任何重大异常而进程垮掉),数据库无一例外地损坏了。并且要知道,如果数据库文件果真损坏了,修复操作虽然能让整个数据文件不至于报废,可是你也往往会丢失十几条记录。这是这种十几年前的老掉牙的数据库的很明显的毛病。你为什么不使用SQL Server Compact数据库呢?
// 注意,调用前要关闭所有数据库连接
string dbFile = @"D:\db1.mdb";
string tmpFile = Path.GetTempFileName().Replace(".tmp", ".mdb");string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}";
object[] paramters = new object[] { string.Format(conn, dbFile), string.Format(conn, tmpFile) };object jro = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"));
jro.GetType().InvokeMember("CompactDatabase", BindingFlags.InvokeMethod, null, jro, paramters);File.Delete(dbFile);
File.Move(tmpFile, dbFile);
导入 access.dll
Microsoft.Office.Interop.Access.Application accessApp = new Microsoft.Office.Interop.Access.Application();
accessApp.CompactRepair(FileName, FileName.Replace(".EDBC", ".bak"), true);