第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

.net中的交易

.net中的交易

撒科打諢 2019-07-23 17:50:46
.net中的交易在C#.Net 2.0中進(jìn)行事務(wù)的最佳實踐是什么?應(yīng)該使用哪些類?需要注意的缺陷是什么等等。所有提交和回滾的東西。我剛剛開始一個項目,我可能需要在將數(shù)據(jù)插入數(shù)據(jù)庫時進(jìn)行一些事務(wù)。任何有關(guān)交易的基本內(nèi)容的回復(fù)或鏈接都是受歡迎的。
查看完整描述

3 回答

?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗 獲得超5個贊

主要有兩種交易方式; 連接事務(wù)和環(huán)境事務(wù)。連接事務(wù)(例如SqlTransaction)直接綁定到數(shù)據(jù)庫連接(例如SqlConnection),這意味著您必須繼續(xù)傳遞連接 - 在某些情況下確定,但不允許“創(chuàng)建/使用/發(fā)布”用法,并且不允許跨數(shù)據(jù)庫工作。一個例子(格式化為空格):

using (IDbTransaction tran = conn.BeginTransaction()) {
    try {
        // your code
        tran.Commit();
    }  catch {
        tran.Rollback();
        throw;
    }}

不太亂,但僅限于我們的連接“conn”。如果我們想要調(diào)用不同的方法,我們現(xiàn)在需要傳遞“conn”。

另一種選擇是環(huán)境交易; 在.NET 2.0中,TransactionScope對象(System.Transactions.dll)允許在一系列操作中使用(合適的提供者將自動登記在環(huán)境事務(wù)中)。這使得可以輕松地改編為現(xiàn)有(非事務(wù)性)代碼,并與多個提供者交談(盡管如果您與多個提供者交談,DTC將參與其中)。

例如:

using(TransactionScope tran = new TransactionScope()) {
    CallAMethodThatDoesSomeWork();
    CallAMethodThatDoesSomeMoreWork();
    tran.Complete();}

請注意,這兩個方法可以處理它們自己的連接(open / use / close / dispose),但它們將默默地成為環(huán)境事務(wù)的一部分,而我們不必傳遞任何內(nèi)容。

如果您的代碼出錯,Dispose()將在沒有Complete()的情況下被調(diào)用,因此它將被回滾。雖然您無法回滾內(nèi)部事務(wù)但完成外部事務(wù),但支持預(yù)期的嵌套等:如果任何人不滿意,則事務(wù)將中止。

TransactionScope的另一個優(yōu)點是它不僅僅與數(shù)據(jù)庫綁定; 任何支持事務(wù)的提供者都可以使用它。例如,WCF?;蛘呱踔劣幸恍┡cTransactionScope兼容的對象模型(即具有回滾功能的.NET類 - 可能比紀(jì)念品更容易,盡管我自己從未使用過這種方法)。

總而言之,這是一個非常非常有用的對象。

一些警告:

  • 在SQL Server 2000上,TransactionScope將立即轉(zhuǎn)到DTC; 這是在SQL Server 2005及更高版本中修復(fù)的,它可以使用LTM(更少的開銷),直到你與2個源等交談,當(dāng)它被提升到DTC時。

  • 有一個小故障意味著您可能需要調(diào)整連接字符串


查看完整回答
反對 回復(fù) 2019-07-23
?
www說

TA貢獻(xiàn)1775條經(jīng)驗 獲得超8個贊

protected void Button1_Click(object sender, EventArgs e)
   {


       using (SqlConnection connection1 = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database.mdf;Integrated Security=True;User Instance=True"))
       {
           connection1.Open();

           // Start a local transaction.
           SqlTransaction sqlTran = connection1.BeginTransaction();

           // Enlist a command in the current transaction.
           SqlCommand command = connection1.CreateCommand();
           command.Transaction = sqlTran;

           try
           {
               // Execute two separate commands.
               command.CommandText =
                "insert into [doctor](drname,drspecialization,drday) values ('a','b','c')";
               command.ExecuteNonQuery();
               command.CommandText =
                "insert into [doctor](drname,drspecialization,drday) values ('x','y','z')";
               command.ExecuteNonQuery();

               // Commit the transaction.
               sqlTran.Commit();
               Label3.Text = "Both records were written to database.";
           }
           catch (Exception ex)
           {
               // Handle the exception if the transaction fails to commit.
               Label4.Text = ex.Message;


               try
               {
                   // Attempt to roll back the transaction.
                   sqlTran.Rollback();
               }
               catch (Exception exRollback)
               {
                   // Throws an InvalidOperationException if the connection 
                   // is closed or the transaction has already been rolled 
                   // back on the server.
                   Label5.Text = exRollback.Message;

               }
           }
       }


   }


查看完整回答
反對 回復(fù) 2019-07-23
?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗 獲得超5個贊

您還可以將事務(wù)包裝到它自己的存儲過程中并以這種方式處理它,而不是在C#本身中執(zhí)行事務(wù)。


查看完整回答
反對 回復(fù) 2019-07-23
  • 3 回答
  • 0 關(guān)注
  • 480 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號