ms-access - System.Data.Odbc.OdbcException (0x80131937) 发布后,我无法使用 Odbc 功能读取、删除和写入访问 mdb 文件
问题描述
无法连接 OdbcConnection Microsoft Access 驱动程序 - 发布 System.Data.Odbc.OdbcException (0x80131937) 后
发布应用程序后,我失去了 OdbcConnection/Command 功能。
下面的代码是应用程序在发布时出错的地方。在开发中,所有这些都有效。
//Connect to access .mdbcd
var conn = new OdbcConnection(@"Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=D:\wwwroot\mo22\storesales.mdb");
conn.Open();
//Clear out table
OdbcCommand Com = conn.CreateCommand();
Com.CommandText = "DELETE FROM tblAcctData";
Com.ExecuteNonQuery();
returnList.ForEach(el =>
{
OdbcCommand thisCmd = conn.CreateCommand();
thisCmd.CommandText = "INSERT INTO [tblAcctData] ([Store], [ProcDate], [Name], [Amount]) VALUES('" + el.Store + "', #" + el.proc_date + "#, '" + el.Name + "', " + el.amount + ")";
thisCmd.ExecuteNonQuery();
});
//Close connection
conn.Close();
到目前为止,我已将 Microsoft Access 添加到服务器。
- 在系统数据源中添加了 32 位和 64 位驱动程序。- 使用附加凭据编辑连接字符串。-尝试扩展AnsiSQL = 1;在连接字符串中。
当我在系统数据源中添加 64 位驱动程序(Microsoft Access Driver ( .mdb, .accdb))时,日志中不再出现错误,并且在前端出现此错误。
t {headers: e, status: 502, statusText: "Bad Gateway", url: " http://apps.o.com/mochub2/api/acctlegenddata/getdata?stores=01&date=9/2/2019 ", ok : 错误的, …}
所以我觉得我有点到了某个地方,因为没有 odbc 错误。只是一个错误,说我的网关不好。
有谁知道接下来的步骤是什么?
这是没有 64 位 Microsoft Access 驱动程序的错误。
System.Data.Odbc.OdbcException (0x80131937) 在 System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle) 在 System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions) 在System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) 在 System.Data. ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 重试, DbConnectionOptions userOptions,DbConnectionInternal oldConnection, DbConnectionInternal& connection) 在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions) 在 System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 在 System.Data .Odbc.OdbcConnection.Open() at mocHub2.Controllers.AcctLegendDataController.GetData(String stores, DateTime date) in C:\Ang\Controllers\AcctLegendDataController.cs:line 330 at lambda_method(Closure , Object , Object[] ) at Microsoft Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor 上的 .Extensions.Internal.ObjectMethodExecutor.Execute(对象目标,对象 [] 参数)。在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync() 在 Microsoft.AspNetCore.Mvc 执行(IActionResultTypeMapper 映射器,ObjectMethodExecutor 执行器,对象控制器,Object[] 参数) .Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync() 在Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext 上下文) 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker。Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) 在 Microsoft.AspNetCore.Routing.EndpointMiddleware 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() 在 Microsoft.AspNetCore.Routing.EndpointMiddleware 的 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() .Invoke(HttpContext httpContext) 在 Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext) 在 Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) 在 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) 在 Microsoft .AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext 上下文)在 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext 上下文)Internal.ResourceInvoker.InvokeFilterPipelineAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() 在 Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) 在 Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext) 在Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) 在 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) 在 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) 在 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware。调用(HttpContext 上下文)Internal.ResourceInvoker.InvokeFilterPipelineAsync() 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() 在 Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) 在 Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext) 在Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) 在 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) 在 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) 在 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware。调用(HttpContext 上下文)AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke( HttpContext 上下文)在 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext 上下文)AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke( HttpContext 上下文)在 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext 上下文)
解决方案
到目前为止,我已将 Microsoft Access 添加到服务器。- 在系统数据源中添加了 32 位和 64 位驱动程序。-
坚持,稍等!您添加了访问权限,但是什么版本?有 x32 位版本和 x64 位版本。因此,除非您愿意强制您的 web 服务器以 x32 位运行,并运行 x32 IIS web 服务器,否则您很可能想要安装 x64 位版本的访问。
- 在系统数据源中添加了 32 位和 64 位驱动程序。
真的不可能。如果您安装了 x64 位访问,那么您将无法在 x32 odbc 配置(Windows)面板中选择 accDB 文件。您将始终能够使用 mdb 文件,因为 JET 数据引擎安装在所有 Windows 副本上(并且是仅 x32 位版本)。
因此,在您尝试建立连接之前,您需要确保安装了 x64 位版本的访问权限。完成后,您可以使用 oleDB 提供程序或 ODBC 提供程序。我非常强烈建议您使用 ODBC 提供程序,从那时起您可以更轻松地将连接翻转到 SQL 服务器或其他数据库,并且您的代码更改将是绝对最小的。(编辑:我看到你在这里使用 ODBC - 所以我的坏,你的好!)
添加 x64 位版本的 Access 后,您应该能够连接到数据库。在您的开发机器上,您希望 VS 告诉 IIS 使用 x64 位,而当我们这样做时,您很可能应该在您的开发盒上启动并运行 x64 位访问。
推荐阅读
- excel - I break the vba formula in 4 pieces still I am getting error "Unable to set formulaArray property of range classe"
- python - I Want To Filter Data For Excel Files Using Pandas
- asp.net - How to download file by code sent with Response.TransmitFile?
- java - Strange behavior while running remote powershell execution from Java
- sap-cloud-sdk - 在查询中使用多个过滤器
- excel - How to allow user to review worksheet using excel vba
- javascript - link_to specific date in fullcalendar
- android-studio - 在 android 中禁用了热重载按钮并且 CTRL+S 不起作用
- flutter - 使用 simple_slider 时避免显示空值
- oop - OOP 设计推荐——带有服务的 REST 客户端,每个服务都有方法