[英]How to apply transaction roll back in database object in .net c#
有誰知道如何在.net c#中的數據庫對象中應用事務回滾?
示例:本來我有以下代碼:
protected void btnSave_Click(object sender, EventArgs e)
{
try {
m_test = CreateTest();
} catch{}
}
private Db.Test CreateTest()
{
var test= new Test();
test.Title = sTitle.SelectedValue;
test.FirstName = sFirstName.Text;
test.LastName = sLastName.Text;
test.PhoneHome = sHomePhone.Text;
test.PhoneWork = sWorkPhone.Text;
test.PhoneMobile = sMobile.Text;
test.EmailAddress = sEmail.Text;
test.Save();
return test;
}
然后,我嘗試將事務回滾操作應用到代碼中,並在其中應用以下代碼...然后,我將其堆疊在CreateTest方法下。 我不知道如何為數據庫對象應用代碼
protected void btnSave_Click(object sender, EventArgs e)
{
SqlConnection connDB = new SqlConnection();
SqlCommand cmdExecuting = new SqlCommand();
try {
connDB = new SqlConnection(connection_string);
cmdExecuting.Connection = connDB;
connDB.Open();
cmdExecuting.Transaction = connDB.BeginTransaction();
m_test = CreateTest(cmdExecuting);
if (m_test != 0) {
cmdExecuting.Transaction.Rollback();
return;
}
} catch{}
}
private Db.Test CreateTest(SqlCommand cmdExecuting)
{
var test= new Test();
test.Title = sTitle.SelectedValue;
test.FirstName = sFirstName.Text;
test.LastName = sLastName.Text;
test.PhoneHome = sHomePhone.Text;
test.PhoneWork = sWorkPhone.Text;
test.PhoneMobile = sMobile.Text;
test.EmailAddress = sEmail.Text;
test.Save();
return test;
}
有誰知道在這種情況下如何在CreateTest()中進行編碼?
看一下TransactionScope類,它提供了許多好處,包括
。
try
{
using (TransactionScope scope = new TransactionScope())
{
m_test = CreateTest();
scope.Complete(); // Commit transaction
}
}
catch (Exception ex)
{
// Transaction is automatically rolled back
}
另外,請參閱.NET Framework 2.0中的介紹System.Transactions一文作為一個很好的起點。
您可以采取以下措施,不需要在后端進行事務處理,后端sqltransaction對象會處理該事務。 您可以將此代碼放在自己的事件中,無論哪個事件負責將數據插入數據庫中
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;uid=sa;pwd=sa;");
myConnection.Open();
// Start a local transaction
SqlTransaction myTrans = myConnection.BeginTransaction();
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myConnection;
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "delete * from Region where RegionID=101";
// Attempt to commit the transaction.
myCommand.ExecuteNonQuery();
myTrans.Commit();
Response.Write("Both records are written to database.");
}
catch (Exception ep)
{
// Attempt to roll back the transaction.
myTrans.Rollback();
Response.Write(ep.ToString());
Response.Write("Neither record was written to database.");
}
finally
{
myConnection.Close();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.