我开发了一个Web应用程序。有些方法使用Transactions。一切正常, 除非有几个用户开始同时使用webapplication 时间。我经常收到以下消息:
"当分配给Command的Connection对象处于挂起状态时,Execute要求Command对象具有Transaction对象 本地交易。 Command的Transaction属性没有 已初始化。"
目前情况如此:
1)有一个Web应用程序,可以访问许多不同的方法 一个Oracle数据库。这些方法彼此不相互影响 方法执行自己的任务。
2)有些方法使用事务,有些方法只执行一个SQL 声明,因此不使用交易。
当一个用户使用该应用程序时,一切正常。没有 代码中的错误或无效的事务。
当其他用户有时同时开始使用该应用程序时 之前提到的错误发生了。在这些方法中可能会发生此错误 甚至与使用交易的方法无关。
我们使用Oracle 10g作为数据库。
代码示例:
public String NS_INFO_ESTUDO_TECNICO_MOD(StringDictionary strDict) {
OpenConn();
OracleTransaction oTrans = connection.BeginTransaction(IsolationLevel.ReadCommitted);
OracleCommand command = connection.CreateCommand();
command.Transaction = oTrans;
command.CommandText = "GOMNET_PROJETOS.NS_INFO_ESTUDO_TECNICO_MOD";
command.CommandType = CommandType.StoredProcedure;
try
{
OracleParameter param30 = new OracleParameter("nCodigoError",OracleType.Number);
param30.Size = 1000;
param30.Direction = ParameterDirection.Output;
command.Parameters.Add(param30);
command.ExecuteNonQuery();
if (param30.Value.ToString() != "0")
{
oTrans.Rollback();
return ObtemMensagem(param30.Value.ToString());
}
else
{
oTrans.Commit();
}
return "0";
}
catch (Exception e)
{
throw e;
}
finally
{
command.Dispose();
}
}
此应用程序没有密切连接就有太多的数据库访问权限。在很多方法中使用command.Dispose()。