本機交易通常使用在主、從式應用程式中,更新的對象限定於同一個資料來源。應用程式可以使用在ADO.NET當中的Connection物件搭配Transaction物件來完成,而Command物件有一個Transaction屬性,允許把想要執行的多個命令,包裝成一個單獨的交易。讓整個交易中所有的工作,都有一致的結果,不是完全成功執行就是完全失敗。<br /><connectionStrings><br /> <add name="DataAccess.Properties.Settings.NorthwindConStr" <br /> connectionString="Data Source=localhost;Initial Catalog=Northwind;User ID=sa; Password=P@$sW0rD; MultipleActiveResultSets=True"<br /> providerName="System.Data.SqlClient" /><br /></connectionStrings><br /><br /><br />public class Trans {<br /> private SqlConnection m_Connection = new SqlConnection(Properties.Settings.Default.NorthwindConStr);<br /> private string _ErrorStr;<br /> public string ErrorStr {<br /> get { return this._ErrorStr; }<br /> set { this._ErrorStr = value; }<br /> }<br /><br /> public bool Transact() {<br /> bool result = false;<br /> SqlTransaction tx = null;<br /> string cmdstr1 = @"UPDATE dbo.Products SET UnitPrice = UnitPrice*1.2";<br /> string cmdstr2 = @"UPDATE Production.Product SET ListPrice = ListPrice*1.2";<br /> try {<br /> m_Connection.Open();<br /> tx = m_Connection.BeginTransaction();<br /> SqlCommand cmd1 = new SqlCommand(cmdstr1, m_Connection, tx);<br /> SqlCommand cmd2 = new SqlCommand(cmdstr2, m_Connection, tx);<br /> cmd1.ExecuteNonQuery();<br /> m_Connection.ChangeDatabase("AdventureWorks");<br /> cmd2.ExecuteNonQuery();<br /> tx.Commit();<br /> result = true;<br /> }<br /> catch (SqlException sqlex) {<br /> this.ErrorStr = sqlex.Message.ToString();<br /> tx.Rollback();<br /> }<br /> finally {<br /> m_Connection.Close();<br /> }<br /> return result;<br /> }<br />}<br />
標籤: ADO.NET
較新的文章 較舊的文章 首頁