我有这段代码
protected void btnUpdateAddress_Click(object sender, EventArgs e)
{
sdsAddressComparison.Update();
}
我正在使用更新oracle数据库。当我在SQL Navigator中运行更新sql代码时,我必须输入“Commit”或点击提交按钮。
我是否必须在ASP.NET中的“提交”代码中进行编码?如果是这样,我该怎么做?
答案 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节点。
有以下相关设置:
[]在每个语句(复选框)之后提交
关闭连接时:(无线电选择)
所以你可以改变设置,这样你就不需要点击提交按钮(或者输入“commit”),但这通常是一种不好的做法,因为提交是你应该明确做的事情(或明确地回滚) )。
答案 4 :(得分:0)
SQL * Plus中也提供了自动提交。
SET AUTOCOMMIT ON
SET AUTOCOMMIT OFF
或
SET AUTOCOMMIT 100
使用SHOW AUTOCOMMIT查看当前设置。
但是......我讨厌这个设置。你在一个有意义的工作单元结束时提交,而不是一部分。