gpt4 book ai didi

c# - 试图在 .NET 应用程序中读取或写入 protected 内存

转载 作者:太空狗 更新时间:2023-10-29 21:58:21 30 4
gpt4 key购买 nike

我在 IIS 6 服务器中实现和 ASP .Net 应用程序时遇到问题。

当用户试图打开访问数据库的网页时,iis 服务器抛出“试图读取或写入 protected 内存”这是 StackTrace:

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. at Oracle.DataAccess.Client.OpsPrm.ResetValCtx(OpoPrmValCtx* pOpoPrmValCtx, Int32 ctxSize) at Oracle.DataAccess.Client.OracleParameter.ResetCtx(Int32 arraySize) at Oracle.DataAccess.Client.OracleParameter.PreBind(OracleConnection conn, IntPtr errCtx, Int32 arraySize) at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior) at Oracle.DataAccess.Client.OracleCommand.ExecuteReader() at Oracle.DataAccess.Client.OracleCommand.ExecuteScalar() at Tenaris.FSA.OracleProvider.OracleProvider.ExecuteScalar(String commandToExecute, CommandType commandType, DbParameter[] parameters) in C:\Congelados FSA\FSA 1er Entregable 05052013\Tenaris.FSA.OracleProvider\OracleProvider.cs:line 223 at Tenaris.FSA.DAC.Providers.DataAccessManager.ExecuteScalar(String commandToExecute, CommandType commandType, DbParameter[] parameters) in C:\Congelados FSA\FSA 1er Entregable 05052013\Tenaris.FSA.DataAccessComponent\Providers\DataAccessManager.cs:line 59 at Tenaris.FSA.DAC.Repository.AppointmentWayClientDAL.GetCountRegisters(Boolean onlyEnabled) in C:\Congelados FSA\FSA 1er Entregable 05052013\Tenaris.FSA.DataAccessComponent\Repository\AppointmentWayClientDAL.cs:line 39 at Tenaris.FSA.BusinessComponents.BusinessProcess.AppointmentWayClientManager.GetCountRegisters(Boolean onlyEnabled) in C:\Congelados FSA\FSA 1er Entregable 05052013\Tenaris.FSA.BusinessComponents\BusinessProcess\AppointmentWayClientManager.cs:line 28

很少见,因为该错误不应该出现在托管代码中,而且站点的先前版本工作正常。我做了几个测试,比如在 x86 平台 pc 上编译应用程序,从功能版本复制 web.config,从功能版本复制 Oracle.DataAccess dll,但错误仍然显示。

您应该知道的另一件事是,有一个页面实际上成功地填充了一个下拉列表,但随后该页面必须填充一个 gridview,并且出现了上述异常。

最佳答案

我终于可以解决这个问题,另一个开发人员在创建 OracleParameters 时使用了“using”子句,就像:

using(OracleParameter prm = SomeMethodThatCreatesIt(value,paramName))
{
//extracode
myCommand.Parameters.Add(prm);
}

因此代码必须更改为:

OracleParameter prm = SomeMethodThatCreatesIt(value,paramName);
//extracode
myCommand.Parameters.Add(prm);

正如您在堆栈跟踪中看到的那样,问题出在参数的某些过程中。

所以,代码是在使用之前处理对象。我不明白的是为什么这甚至可以在我的测试之一的控制台应用程序中工作,但它现在可以工作了,谢谢大家

关于c# - 试图在 .NET 应用程序中读取或写入 protected 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16573614/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com