数据库 - 使用 - Oracle11g迁移12c 问题收集

兼容性问题

Oracle.DataAccess.DLL 相关

ORA-01460、System.AccessViolationException

类似问题:access violation exception with 12c

环境

后端

.Net Frameworks 版本: v4.0.30319
Oracle.DataAccess.DLL: 4.122.1.0
WPF
平台:AnyCPU
通信:WCF

前端

.Net Frameworks 版本: v3.0
WPF
平台:AnyCPU

问题描述

错误的出现方式不确定,并不会立马出现。

ORA-01460: 转换请求无法实现或不合理
在 ( Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck, Int32 isRecoverable)
   ( Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
   ( Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
   ( Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
   ( Evo.OraDAL.SQLPrp_lot.Prp_lotsGetByLotname(String lotname) Mn xxx.cs:L?330
   ( Evo.BLL.BLLSFC.GetedcparaByStepAndLotname(String lotname, String stepname, String sys_user_id, String& message) Mn xxxx.cs:L?1700 Category: General

或

应用程序: xxxx.exe
Framework 版本: v4.0.30319
说明: 由于未经处理的异常,进程终止。
异常信息: System.AccessViolationException 在: ( Oracle.DataAccess.Client.OpsCon.Close(IntPtr ByRef, IntPtr ByRef, Oracle.DataAccess.Client.OpoConValCtx*, Oracle.DataAccess.Client.OpoConRefCtx) ( Oracle.DataAccess.Client.OpsCon.Close(IntPtr ByRef, IntPtr ByRef, Oracle.DataAccess.Client.OpoConValCtx*, Oracle.DataAccess.Client.OpoConRefCtx) ( Oracle.DataAccess.Client.ConnectionPool.CheckLifeTimeAndStatus(Oracle.DataAccess.Client.OpoConCtx ByRef, Boolean, Boolean ByRef, Int32, Boolean, Boolean) ( Oracle.DataAccess.Client.ConnectionPool.PutConnection(Oracle.DataAccess.Client.OpoConCtx ByRef, Boolean, Boolean, Boolean, Int32, Boolean, Boolean) ( Oracle.DataAccess.Client.ConnectionDispenser.Close(Oracle.DataAccess.Client.OpoConCtx ByRef, Boolean) ( Oracle.DataAccess.Client.OracleConnection.Close() ( Oracle.DataAccess.Client.OracleConnection.Dispose(Boolean) ( System.ComponentModel.Component.Dispose() ( xxxxxx.xxxxGetByid(System.String) ( xxxx.GetxxxxByid(System.String, System.String, System.String ByRef) ( xxxxx.GetxxxxByid(System.String, System.String, System.String ByRef) ( DynamicClass.SyncInvokeGetxxxxByid(System.Object, System.Object[], System.Object[]) ( System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(System.Object, System.Object[], System.Object[] ByRef) ( System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(System.ServiceModel.Dispatcher.MessageRpc ByRef) ( System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(System.ServiceModel.Dispatcher.MessageRpc ByRef) ( System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(System.ServiceModel.Dispatcher.MessageRpc ByRef) ( System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean) ( System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(System.ServiceModel.Channels.RequestContext, Boolean, System.ServiceModel.OperationContext) ( System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(System.ServiceModel.Channels.RequestContext, System.ServiceModel.OperationContext) ( System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(System.IAsyncResult) ( System.Runtime.Fx+AsyncThunk.UnhandledExceptionFrame(System.IAsyncResult) ( System.Runtime.AsyncResult.Complete(Boolean) ( System.ServiceModel.Channels.TransportDuplexSessionChannel+TryReceiveAsyncResult.OnReceive(System.IAsyncResult) ( System.Runtime.Fx+AsyncThunk.UnhandledExceptionFrame(System.IAsyncResult) ( System.Runtime.AsyncResult.Complete(Boolean) ( System.ServiceModel.Channels.SynchronizedMessageSource+ReceiveAsyncResult.OnReceiveComplete(System.Object) ( System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(System.Object) ( System.ServiceModel.Channels.TracingConnection+TracingConnectionState.ExecuteCallback() ( System.ServiceModel.Channels.SocketConnection.OnReceiveAsync(System.Object, System.Net.Sockets.SocketAsyncEventArgs) ( System.Net.Sockets.SocketAsyncEventArgs.FinishOperationSuccess(System.Net.Sockets.SocketError, Int32, System.Net.Sockets.SocketFlags) ( System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback(UInt32, UInt32, System.Threading.NativeOverlapped*) ( System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*) 

原因不明:在同时使用 TransactionScope 、WCF通信、CommandBehavior.CloseConnection[cmd.ExecuteReader(CommandBehavior.CloseConnection)] 就会报错
没有解决方案,但有个绕道方案:不使用 CommandBehavior.CloseConnection;

posted @ 2022-01-11 10:00  阿明,小明  阅读(123)  评论(0编辑  收藏  举报