我试图使用托管的esent api附加到exchange服务器数据库文件,但在调用jetattachdatabase时出现下一个错误:“数据库页上的校验和错误”或JET_errReadVerifyFailure。有谁能解释一下这意味着什么以及如何修复它吗?该数据库使用相同的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
谢谢。

最佳答案

我遇到了同样的问题。你的猜测是对的,这是因为版本不同。如果试图打开由winxp esent引擎生成的win7/vista数据库,则会出现此错误。
不幸的是,没有办法修复它,而不是升级你的Windows。我指的是法律途径。
因为如果你只是用新的来回复你的esent.dll,它就会工作。但Windows许可证不允许这样做。
下面是关于这个问题的另一个讨论:
ESENT distribution rights

关于c# - 如何使用可扩展存储引擎API附加* .edb数据库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7690225/

10-11 03:50