从asp.net更新Oracle时是否需要“提交”?

时间:2008-12-02 19:47:11

标签: asp.net oracle

我有这段代码

    protected void btnUpdateAddress_Click(object sender, EventArgs e)
    {
        sdsAddressComparison.Update();
    }

我正在使用更新oracle数据库。当我在SQL Navigator中运行更新sql代码时,我必须输入“Commit”或点击提交按钮。

我是否必须在ASP.NET中的“提交”代码中进行编码?如果是这样,我该怎么做?

5 个答案:

答案 0 :(得分:4)

通常,不,你不需要提交。

但是您可以编写代码来使用事务,并且在事务完成时您可以调用commit。

<强> E.G。 (正常):

try {
        // Open connection
        dbConn.Open();
        //DB Update Code Here
    }
    catch (Exception ex) {
        throw;
    }
    finally {
        // Close database connection
        dbConn.Close();
    }

<强> E.G。 (作为交易):

try {
        // Open connection & begin transaction
        dbConn.Open();
        dbTran = dbConn.BeginTransaction();
        
        //DB Update Code Here
        // Commit transaction
        dbTran.Commit();
    }
    catch (Exception ex) {
        // Rollback transaction
        dbTran.Rollback();
        throw;
    }
    finally {
        // Close database connection
        dbConn.Close();
    }

答案 1 :(得分:3)

默认情况下,您的ASP.Net代码和大多数其他数据库客户端API(ODBC,OLE DB,JDBC等)都以自动提交模式运行。也就是说,只要成功执行语句,结果就会被提交。如果您在这种默认模式下运行,则无需显式提交更新。

另一方面,将更新放在显式事务中通常有很多说法 - 如果您必须发出多个更新以进行一次逻辑业务更改,则默认的自动提交模式为一个非常糟糕的人。这里的经典示例是,如果您更新帐户A以提取50美元然后更新帐户B以存入50美元并且由于启用了自动提交而最终有两个不同的交易,则第一个交易可能会成功而另一个交易成功交易失败,系统失去50美元的跟踪。

因此,您通常希望编写类似于Brian在使用事务时所展示的代码并发出显式提交的代码。但默认情况下,您没有必要,您的更新将自动提交。

答案 2 :(得分:0)

只是为了澄清....我不是在谈论SQL Server事务......我在谈论Oracle更新,当我使用SQL navigator或SQL Plus时,它通常需要一个commit命令

我发布此内容的原因是因为我可以在SQL Navigator中更新此数据,但在使用ASP.NET时它不会更新。

答案 3 :(得分:0)

您在SQL Navigator中看到的行为可能由选项设置决定。

我没有使用过SQL Navigator,但我确实使用了TOAD,这也是Quest Software的用法。在那里的选项对话框中,它位于View-&gt; Toad Options ...下,然后是Oracle-&gt; Transactions节点。

有以下相关设置:

  • []在每个语句(复选框)之后提交

  • 关闭连接时:(无线电选择)

    • ()提交
    • ()回滚
    • ()检测到更改时提示提交/回滚,或由于缺少dmbs_transaction权限而无法检测。

所以你可以改变设置,这样你就不需要点击提交按钮(或者输入“commit”),但这通常是一种不好的做法,因为提交是你应该明确做的事情(或明确地回滚) )。

答案 4 :(得分:0)

SQL * Plus中也提供了自动提交。

SET AUTOCOMMIT ON
SET AUTOCOMMIT OFF

SET AUTOCOMMIT 100

使用SHOW AUTOCOMMIT查看当前设置。

但是......我讨厌这个设置。你在一个有意义的工作单元结束时提交,而不是一部分。