6

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

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

System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏。在 Oracle.DataAccess.Client.OracleParameter.ResetCtx(Int32 arraySize) 在 Oracle.DataAccess.Client.OracleParameter.PreBind(OracleConnection conn, IntPtr errCtx, Int32 arraySize) 在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior 行为) 在 Oracle.DataAccess.Client.OracleCommand.ExecuteReader() 在 Oracle.DataAccess.Client.OracleCommand.ExecuteScalar() 在 Tenaris.FSA C 中的 .OracleProvider.OracleProvider.ExecuteScalar(String commandToExecute, CommandType commandType, DbParameter[] 参数):

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

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

4

2 回答 2

1

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

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

所以代码不得不改为:

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

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

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

于 2013-05-21T21:27:44.897 回答
-1

系统已用完 ram 来加载它,因此当它试图从受保护内存的其他应用程序中获取更多时,请获取更多 ram

于 2013-05-21T18:27:30.890 回答