由于access访问比较频繁,读取access的时候经常会出现“不可识别的数据库格式”的异常,此时双击那个文件会提示 数据库处于不一致状态什么什么,尝试恢复什么什么,点确定就可以恢复啦,关键是出现这个异常的时候我怎样用代码修复它,这个时候不管是compact,CompactDatabase只要操作这个表,就会抛出 “不可识别的数据库格式”的异常,求助

解决方案 »

  1.   

    在ACCESS 工具菜单里使用压缩和修复下看看
      

  2.   

    access工具可以修复,但是我要用代码操作啊,不能让用户察觉
      

  3.   

    compact肯定是不对的,看来你没有查查英文字典这个词的意思是什么。要有修复功能(当然有啦),也应该写为repair之类的!实际上,不管数据库文件有没有损坏,每当进程启动时都应该去修复数据库。Jet引擎的数据库文件及其容易损坏,当你让一个程序修改数据,然后立刻终止进程(或者遇到任何重大异常而进程垮掉),数据库无一例外地损坏了。并且要知道,如果数据库文件果真损坏了,修复操作虽然能让整个数据文件不至于报废,可是你也往往会丢失十几条记录。这是这种十几年前的老掉牙的数据库的很明显的毛病。你为什么不使用SQL Server Compact数据库呢?
      

  4.   


    // 注意,调用前要关闭所有数据库连接
    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);
      

  5.   

    回楼上,只要对数据库有任何操作都会抛出 不可识别数据库异常,因为开始数据量不是很大 所以就用了access,结果到现在想改也改不了了
      

  6.   

    我找到了方法 貌似可行 
    导入 access.dll 
     Microsoft.Office.Interop.Access.Application accessApp = new Microsoft.Office.Interop.Access.Application();
                                accessApp.CompactRepair(FileName, FileName.Replace(".EDBC", ".bak"), true);