甲骨文的ExecuteNonQuery冻结在ASP.Net(oracle ExecuteNonQue

2019-10-20 03:28发布

我试图运行使用ASP C#与CLR 4.5的Oracle连接非查询。 这里是我的代码:

    string connectionString = ConfigurationManager.ConnectionStrings["OracleConnectionString1"].ConnectionString;
    OracleConnection conn = new OracleConnection(connectionString);
    conn.Open();
    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = "update SALES_ADVENTUREWORKS2012.SALESORDERDETAIL set UNITPRICEDISCOUNT=0 where ROWGUID='4A399178-C0A0-447E-9973-6AB903B4AECD'";
    cmd.CommandType = CommandType.Text;
    cmd.CommandTimeout = QUERY_TIMEOUT;
    int row_affected = cmd.ExecuteNonQuery();
    HttpContext.Current.Response.Write("Rows affected:" + row_affected + "<br/>");
    conn.Close();

当我运行在Oracle开发工具查询,它工作正常。 当我使用上面的ASP代码,它在执行查询时冻结。 它永远冻结,即使我用5秒超时。 我已经使用了托管和非托管Oracle库尝试; 两者具有相同的行为。 请注意,使用填充或标量查询工作完全没有问题所以没有错,我的连接字符串。 此外,甲骨文的发展可以执行此更新查询的事实证明,这是不是一个权限问题。

有任何想法吗?

Answer 1:

最有可能您的查询等待获得访问记录。 你可能已经修改了“Oracle开发工具,”该行并没有提交或回滚该事务。

只需提交/回滚你的工具或关闭打开的会话。 您可以为您在V $视图交易打开的事务。

更多关于在Oracle自动锁: http://docs.oracle.com/cd/E11882_01/server.112/e41084/ap_locks001.htm



Answer 2:

你确定你使用的是4.5库? 该3.5文档指出CommandTimeout属性没有任何效果。

该4.5文档表明,它应该工作,但是说明部分没有提及的变化,这令怀疑。

否则,你发布的代码似乎并没有表现出在这里你居然QUERY_TIMEOUT的值设置为5秒。 如果QUERY_TIMEOUT具有零值,那么任何其他供应商(SqlCommand的,例如)将无限期地等待。 由于VAV建议,从其他来源的锁可能会导致无限期的等待。



文章来源: oracle ExecuteNonQuery freezes on ASP.Net