OleDbException Microsoft Access 找不到 MSysAccessStorage
OleDbException Microsoft Access cannot find MSysAccessStorage
我的项目在连接字符串 Provider=Microsoft.ACE.OLEDB.12.0 中使用 EntityFrameworkCore.Jet.OleDb v3.1 和 provider。代码经历了几次迭代,包括 RemoveRange,然后是 AddRange。目前是这个
boards.ForEach((board) =>
{
if (_cutriteDbContext.Boards.Any(i => i.BoardsCode == board.BoardsCode))
{
_cutriteDbContext.Boards.Update(board);
}
else
{
_cutriteDbContext.Boards.Add(board);
}
});
我收到一条错误消息,提示它在到达 .Boards.Any()
时找不到 MSysAccessStorage。这是因为数据库文件太旧了吗?有没有人遇到过这个?
编辑:有没有办法在 DbContextOptions 中指定与 EntityFrameworkCore.Jet.OleDb 的兼容性?
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware: Error: An unhandled exception has occurred while executing the request.
System.Data.OleDb.OleDbException (0x80040E37): The Microsoft Access
database engine cannot find the input table or query
'MSysAccessStorage'. Make sure it exists and that its name is spelled
correctly. at
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult
hr) at
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS
dbParams, Object& executeResult) at
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object&
executeResult) at
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior
behavior, Object& executeResult) at
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior
behavior, String method) at
System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.ExecuteDbDataReader(CommandBehavior
behavior) at
System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at
EntityFrameworkCore.Jet.Data.JetCommand.ExecuteDbDataReaderCore(CommandBehavior
behavior) at System.Data.Common.DbCommand.ExecuteReader() at
Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject
parameterObject) at
Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.InitializeReader(DbContext _, Boolean result) at EntityFrameworkCore.Jet.Storage.Internal.JetExecutionStrategy.Execute[TState,TResult](TState state, Func
3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable
1.Enumerator.MoveNext()
at System.Linq.Enumerable.Single[TSource](IEnumerable1 source) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.Any[TSource](IQueryable
1
source, Expression1 predicate) at CutriteAPI.Repositories.CutriteRepository.<SyncBoards>b__3_1(Board board) in C:\Users\mbaker\source\repos\CutriteAPI\CutriteAPI\Repositories\CutriteRepository.cs:line 43 at System.Collections.Generic.List
1.ForEach(Action1 action) at CutriteAPI.Repositories.CutriteRepository.SyncBoards(List
1 boards)
in
C:\Users\mbaker\source\repos\CutriteAPI\CutriteAPI\Repositories\CutriteRepository.cs:line
41 at
CutriteAPI.Controllers.CutriteAPIController.SyncBoards(CUT_RITE_FILE
cUT_RITE_FILE) in
C:\Users\mbaker\source\repos\CutriteAPI\CutriteAPI\Controllers\CutriteAPIController.cs:line
94 at
CutriteAPI.Controllers.CutriteAPIController.SyncLibrary(CUT_RITE_FILE
cUT_RITE_FILE) in
C:\Users\mbaker\source\repos\CutriteAPI\CutriteAPI\Controllers\CutriteAPIController.cs:line
78 at lambda_method(Closure , Object ) at
Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable.Awaiter.GetResult()
at
Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper
mapper, ObjectMethodExecutor executor, Object controller, Object[]
arguments) at
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker
invoker, ValueTask`1 actionResultValueTask) at
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker
invoker, Task lastTask, State next, Scope scope, Object state, Boolean
isCompleted) at
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed
context) at
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State&
next, Scope& scope, Object& state, Boolean& isCompleted) at
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker
invoker, Task lastTask, State next, Scope scope, Object state, Boolean
isCompleted) at
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|19_0(ResourceInvoker
invoker, Task lastTask, State next, Scope scope, Object state, Boolean
isCompleted) at
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker
invoker, Task task, IDisposable scope) at
Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint
endpoint, Task requestTask, ILogger logger) at
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext
context) at
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext
context) at
Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext
httpContext) at
Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext
httpContext, ISwaggerProvider swaggerProvider) at
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext
context)
您可以创建具有单列和单条记录的 MSysAccessStorage。
它用于某些只需要一条记录的查询(请参阅 Oracle DUAL table)。
您还可以更改此 table 的名称(它是用于 jet 配置的 ef 提供程序 属性)
我的项目在连接字符串 Provider=Microsoft.ACE.OLEDB.12.0 中使用 EntityFrameworkCore.Jet.OleDb v3.1 和 provider。代码经历了几次迭代,包括 RemoveRange,然后是 AddRange。目前是这个
boards.ForEach((board) =>
{
if (_cutriteDbContext.Boards.Any(i => i.BoardsCode == board.BoardsCode))
{
_cutriteDbContext.Boards.Update(board);
}
else
{
_cutriteDbContext.Boards.Add(board);
}
});
我收到一条错误消息,提示它在到达 .Boards.Any()
时找不到 MSysAccessStorage。这是因为数据库文件太旧了吗?有没有人遇到过这个?
编辑:有没有办法在 DbContextOptions 中指定与 EntityFrameworkCore.Jet.OleDb 的兼容性?
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware: Error: An unhandled exception has occurred while executing the request. System.Data.OleDb.OleDbException (0x80040E37): The Microsoft Access database engine cannot find the input table or query 'MSysAccessStorage'. Make sure it exists and that its name is spelled correctly. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.OleDb.OleDbCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at EntityFrameworkCore.Jet.Data.JetCommand.ExecuteDbDataReaderCore(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader() at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.InitializeReader(DbContext _, Boolean result) at EntityFrameworkCore.Jet.Storage.Internal.JetExecutionStrategy.Execute[TState,TResult](TState state, Func
3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable
1.Enumerator.MoveNext() at System.Linq.Enumerable.Single[TSource](IEnumerable1 source) at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query) at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.Any[TSource](IQueryable
1 source, Expression1 predicate) at CutriteAPI.Repositories.CutriteRepository.<SyncBoards>b__3_1(Board board) in C:\Users\mbaker\source\repos\CutriteAPI\CutriteAPI\Repositories\CutriteRepository.cs:line 43 at System.Collections.Generic.List
1.ForEach(Action1 action) at CutriteAPI.Repositories.CutriteRepository.SyncBoards(List
1 boards) in C:\Users\mbaker\source\repos\CutriteAPI\CutriteAPI\Repositories\CutriteRepository.cs:line 41 at CutriteAPI.Controllers.CutriteAPIController.SyncBoards(CUT_RITE_FILE cUT_RITE_FILE) in C:\Users\mbaker\source\repos\CutriteAPI\CutriteAPI\Controllers\CutriteAPIController.cs:line 94 at CutriteAPI.Controllers.CutriteAPIController.SyncLibrary(CUT_RITE_FILE cUT_RITE_FILE) in C:\Users\mbaker\source\repos\CutriteAPI\CutriteAPI\Controllers\CutriteAPIController.cs:line 78 at lambda_method(Closure , Object ) at Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable.Awaiter.GetResult() at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext) at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
您可以创建具有单列和单条记录的 MSysAccessStorage。 它用于某些只需要一条记录的查询(请参阅 Oracle DUAL table)。 您还可以更改此 table 的名称(它是用于 jet 配置的 ef 提供程序 属性)