【问题标题】:oracle ExecuteNonQuery freezes on ASP.Netoracle ExecuteNonQuery 在 ASP.Net 上冻结
【发布时间】:2014-05-15 20:00:34
【问题描述】:

我正在尝试使用带有 CLR 4.5 的 ASP C# 中的 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 秒超时,它也会永远冻结。 我尝试过使用托管和非托管的 o​​racle 库;两者的行为相同。 请注意,使用填充或标量查询工作得很好,所以我的连接字符串没有任何问题。此外,oracle 开发可以执行此更新查询的事实证明这不是权限问题。

有什么想法吗?

【问题讨论】:

    标签: asp.net oracle executenonquery


    【解决方案1】:

    您的查询很可能正在等待访问记录。您可能已经在“oracle 开发工具”中修改了该行,并且尚未提交或回滚该事务。

    只需在您的工具中提交/回滚或关闭打开的会话。 您可以在 v$transaction 视图中检查未结交易。

    有关 Oracle 中自动锁定的更多信息: http://docs.oracle.com/cd/E11882_01/server.112/e41084/ap_locks001.htm

    【讨论】:

    • 你是对的。 oracle开发工具保持连接打开,超时不起作用导致这个问题。谢谢
    • 我在 SQLDeveloper 中有未提交的事务——提交它们对我有用。感谢您的提示。
    【解决方案2】:

    您确定您使用的是 4.5 库吗? 3.5 documentation 声明 CommandTimeout 属性无效。

    4.5 documentation 建议它应该可以工作,但备注部分没有提及更改,这值得怀疑。

    否则,您发布的代码似乎没有显示您实际将 QUERY_TIMEOUT 的值设置为 5 秒的位置。如果 QUERY_TIMEOUT 的值为零,则任何其他提供程序(例如 SQLCommand)将无限期地等待。正如 vav 建议的那样,来自其他来源的锁定可能会导致无限期等待。

    【讨论】:

    • 是的,我已将超时设置为 5。文档说它以秒为单位,而默认的无效是 15 秒。甲骨文错误!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多