如何附加*.使用可扩展存储引擎API的数据库

本文关键字:引擎 API 数据库 存储 可扩展 何附加 | 更新日期: 2023-09-27 18:10:37

我试图使用Managed Esent API附加到Exchange Server数据库文件,但我得到了下一个错误:"数据库页面上的校验和错误"或JET_errReadVerifyFailure调用JetAttachDatabase。谁能解释一下这是什么意思以及如何解决它?使用相同的API从c++应用程序成功地附加了这个数据库。

代码:

int pageSize;
Api.JetGetDatabaseFileInfo(fileName, out pageSize, JET_DbInfo.PageSize);
SystemParameters.DatabasePageSize = pageSize;
JET_INSTANCE jetInstance;
string jetInstanceName = Guid.NewGuid().ToString("N");
Api.JetCreateInstance(out jetInstance, jetInstanceName);
try
{
  SetSystemParameters(jetInstance, fileName, jetInstanceName);
  Api.JetInit(ref jetInstance);
  JET_SESID jetSessionId;
  Api.JetBeginSession(jetInstance, out jetSessionId, "admin", "password");
  try
  {
    Api.JetAttachDatabase(jetSessionId, fileName, AttachDatabaseGrbit.ReadOnly);
  }
  finally
  {
    Api.JetEndSession(jetSessionId, EndSessionGrbit.None);
  }
}
finally
{
    Api.JetTerm(jetInstance);
}

SetSystemParameters方法中,我只设置SystemPathTempPath参数。也许我需要设置任何额外的参数来解决我的问题?或者我的esent.dll版本比需要的老…现在我的esent.dll版本,在system32文件夹是5.1.2600.5512

谢谢。

如何附加*.使用可扩展存储引擎API的数据库

我也遇到过同样的问题。你猜对了,这是因为版本差异。如果你试图通过WinXP的消息引擎打开Win7/vista的数据库,你会得到这个错误。

不幸的是,没有办法修复它,而不是升级你的Windows。我是说合法的方式。因为如果你用更新的dll替换你的esent.dll,它就会起作用。但是这是Windows许可所不允许的。

下面是对这个问题的另一个讨论:ESENT分销权