在SQL Compact版本中一起使用Ado.net和SqlCeEngine

时间:2012-02-20 08:18:36

标签: sql sql-server-2005

我有一个Windows CE 5的应用程序,它使用Ado.net来备份/恢复我做简单复制的数据库。

在从备份恢复数据库之前,我使用SqlCeEngine验证数据库是否正常,如果没有则修复它。这工作正常但是当我几次恢复大型数据库后,我得到验证方法返回false并且修复函数抛出异常

  

无法加载sqlcecompact30.dll。操作已中止。

现在,对于我要恢复的每个数据库文件都会发生这种情况,直到我退出应用程序。

无法找到原因,如果我删除测试并修复一切正常,数据库正常,但我想在恢复之前检查数据库是否已损坏。

我使用以下CAB文件在PDA(iPAQ 310)上安装SQL。

  • sqlce30.ppc.wce5.armv4i.CAB
  • sqlce30.repl.ppc.wce5.armv4i.CAB

  • Visual Studio 2005

  • Microsoft SQL server 2005 compact
  • Microsoft ssql Client 2.0

这是验证和修复的代码:

private static SqlCeEngine CreateEngine(string DBFileName)
        {
            return new SqlCeEngine("Data Source = '" + DBFileName + "'");
        }

        static public bool CheckDB(string DBFileName)
        {
            SqlCeEngine engine = null;
            try
            {
                FileInfo file = new FileInfo(DBFileName);
                if (file.Exists)
                {
                    engine = CreateEngine(DBFileName);
                    return engine.Verify();                    
                }
            }
            catch
            {
            }
            finally
            {
                if (engine != null)
                {
                    engine.Dispose();
                }
            }
            return false;
        }

        static public bool RepairDB(string DBFileName)
        {
            SqlCeEngine engine = null;
            try
            {
                FileInfo file = new FileInfo(DBFileName);
                if (file.Exists)
                {
                    engine = CreateEngine(DBFileName);
                    engine.Repair(null, RepairOption.RecoverCorruptedRows);
                    return engine.Verify();
                }
            }
            catch (Exception ex)
            {
                Ness300Logger.Logger.Log("Repair failed: " + ex.Message);
            }
            finally
            {
                if (engine != null)
                {
                    engine.Dispose();
                }
            }
            return false;
        }

0 个答案:

没有答案