幾天前,我研究了SqlTransaction
,我知道SqlTransaction.Commit()
的用途 - 它應該「提交數據庫事務」。 - MSDN。SQLTransaction.Commit()如何工作?
但它是如何工作的?
例如:我寫這樣的一段代碼:
using (SqlTransaction tran = connection.BeginTransaction())
{
try
{
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = msg.command;
cmd.Transaction = tran;
cmd.ExecuteNonQuery();
}
}
catch (Exception)
{
// if all of above have any exception, that's mean my transaction is
// failure and my database has no change.
return false;
}
tran.Commit();
// if all of above have no problems, that's mean my transaction is successful
return true;
connection.Dispose();
}
在這種情況下,SQL Server的是另一臺計算機上。
我猜:commit方法有兩個階段,第一階段:當我執行tran.Commit()
時,編譯器會發信號通知SQL Server並與SQL Server交談:「我沒事,請幫我提交(更改)數據」,並且那麼SQL Server將執行編譯器的請求。時段2:SQL Server完全執行編譯器的請求時,執行結果會返回到我們的編譯器。當我們的編譯器收到實現結果時,我們的編譯器將繼續編譯下一個命令行(「返回true」)。
但是,如果在第二個階段,連接中斷,執行結果不會傳回給我們的編譯器。在這種情況下,我們的交易是否成功?數據是否在SQL Server中保存?
附加問題:我關於SQLTransaction.Commit()的兩個週期的預測是否爲true?
謝謝!
在這裏讀到:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.commit%28v=vs.110 %29.aspx – 2015-02-06 05:25:56
我認爲你對你的問題感到困惑。在學習使用C#與SQL Server結婚之前,您可能需要閱讀大約「什麼是數據庫提交」 – Jeyara 2015-02-06 05:28:57
謝謝!我仍然有一個額外的問題:我對SQLTransaction.Commit()的兩個階段的預測是否正確?請幫忙! – GIANGPZO 2015-02-06 07:08:52