• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            twzheng's cppblog

            『站在風口浪尖緊握住鼠標旋轉(zhuǎn)!』 http://www.cnblogs.com/twzheng

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              136 隨筆 :: 78 文章 :: 353 評論 :: 0 Trackbacks

            使用ADO.NET配置SQL Server事務處理

            摘自:賽迪網(wǎng)IT技術

                    ADO.NET提供了處理后臺數(shù)據(jù)所需要的一切功能,并且使用起來就如同從一張表格中讀取一個數(shù)據(jù)那樣簡單。事務處理(transaction)允許你把數(shù)據(jù)庫操作歸為一組,由此來保證所有的操作都能夠執(zhí)行。因為一旦其中的一項操作執(zhí)行失敗,則整個事務處理都會失敗。現(xiàn)在讓我們來看看在.NET Framework下是如何使用事務處理的。

                事務處理概況
             
             
                事務處理是把一組操作合并為一個邏輯上的工作單元。在系統(tǒng)中沒有出現(xiàn)錯誤的情況下,開發(fā)人員可以使用事務處理來控制并保持事務處理中每一個動作的連續(xù)性和完整性。

                使用這樣的方法可能導致向兩個極端情況發(fā)展:要么在事務處理中的所有操作都得到執(zhí)行,要么沒有任何操作得到執(zhí)行。這樣的方法對于實時應用程序來說非常必要。

                銀行業(yè)務是一個范例。事務處理應當包括從一個帳戶到另一帳戶的轉(zhuǎn)帳過程。這一過程屬于事務處理,原因是從某帳戶中支出和在另一帳戶存入兩個動作必須被作為一個整體來執(zhí)行——任何一方都不允許失敗。在深入研究ADO.NET編程之前,讓我們先來看看在SQL中是如何進行事務處理的。

            SQL事務處理
            SQL允許開發(fā)人員使用兩個簡單的聲明來使用事務處理

            Begin Transaction (啟動事務處理)

            Commit Transaction (提交事務處理)

                在兩條聲明中的所有語句都成為事務處理的一部分。命令Begin Transaction位于整個事務處理的起始位置,因此其后的所有命令只有在執(zhí)行到命令Commit Transaction時才會被一并執(zhí)行。ADO.NET方法就這么簡單。

            ADO.NET事務處理
             
             
                事務處理需要一個數(shù)據(jù)庫連接以及一個事務處理對象。在SQL Server和ADO.NET中使用事務處理的難點在于SqlTransaction類。此類名稱隨所使用的數(shù)據(jù)庫平臺的不同而會有一些變化。例如,對于OLEDB數(shù)據(jù)庫來說,事務處理類名為OleDbTransaction。

            System.Data.SqlClient namespace包括了SqlTransaction類。此類包括了兩個屬性:

            Connection:指示同事務處理相關聯(lián)的SqlConnection對象;

            IsolationLevel:定義事務處理的IsolationLevel。

            屬性IsolationLevel是包括如下成員的枚舉對象:

            Chaos:從高度獨立的事務處理中出現(xiàn)的pending changes不能被覆蓋;

            ReadCommitted:當數(shù)據(jù)需要被非惡意讀取時,采用共享鎖定(shared locks),但數(shù)據(jù)仍然可以在事務處理結(jié)束時被更新,這造成了非重復性的數(shù)據(jù)讀取(nonrepeatable reads)或phantom data的產(chǎn)生;

            ReadUncommitted:惡意讀取數(shù)據(jù)是可能發(fā)生的,這表示沒有使用共享鎖定(shared locks),并且沒有實現(xiàn)獨占鎖定(exclusive locks);

            RepeatableRead:鎖定查詢中所用到的所有數(shù)據(jù),由此避免其他用戶對數(shù)據(jù)進行更新。在phantom rows仍然可用的狀態(tài)下,這可以避免非重復性的數(shù)據(jù)讀取(nonrepeatable reads);

            Serialisable:在DataSet中進行范圍鎖定,由此防止其他用戶在事務處理結(jié)束之前更新數(shù)據(jù)或在數(shù)據(jù)庫中插入行;

            IsolationLevel定義鎖定記錄的級別,但這一概念不在本文論述范圍之內(nèi)。對象SqlTransaction也提供了類似的方法。你可以使用以下方法來進行事務處理:

            Commit:提交數(shù)據(jù)庫事務處理;

            Rollback:從未決狀態(tài)(pending state)反轉(zhuǎn)(roll back)事務處理。事務處理一旦被提交后即不能執(zhí)行此操作;

            Save:在事務處理中創(chuàng)建savepoint可以對事務處理的一部分進行反轉(zhuǎn),并且指定savepoint名稱。

                以下的C#示例將這些部分綜合起來。

                這一簡單的控制臺程序?qū)⑼ㄟ^以下步驟將兩行插入到Northwind數(shù)據(jù)庫的表格中:

                調(diào)用Connection對象的BeginTransaction方法以標記事務處理的起始位置。BeginTransaction方法對事務處理返回了一個坐標(reference),此坐標被指定給事務處理所用到的Command對象。

                將Transaction對象指定給將要執(zhí)行的Command的Transaction屬性。如果某Command在活動Transaction中的Connection上被執(zhí)行,并且Transaction對象還沒有被指定到Command的Transaction屬性,則會產(chǎn)生一個異常。

                調(diào)用Transaction對象的Commit方法來結(jié)束事務處理,或者調(diào)用Rollback方法來取消事務處理。

                等價的VB.NET代碼與之類似。

                事務處理結(jié)束
                盡管這是一個簡單的示例,但它還是充分顯示了在.NET應用程序中使用事務處理是多么的簡單。請記住,事務處理只有在處理一組命令時才是必要的。

            posted on 2007-12-19 00:06 譚文政 閱讀(971) 評論(1)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)庫

            評論

            # re: 使用ADO.NET配置SQL Server事務處理 2007-12-20 13:51 秦歌
            頂  回復  更多評論
              

            99久久成人18免费网站| 99久久国产亚洲综合精品| 伊人久久大香线蕉成人| 久久99久久无码毛片一区二区| 好属妞这里只有精品久久| 亚洲精品无码久久千人斩| 久久婷婷色香五月综合激情| 亚洲欧美精品一区久久中文字幕| 久久高潮一级毛片免费| 狠狠精品干练久久久无码中文字幕| 一本色道久久88加勒比—综合| 色综合久久综合网观看| 99久久精品国产毛片| 无码8090精品久久一区| 久久人人爽人人爽人人片av麻烦| 久久无码专区国产精品发布| 亚洲欧洲精品成人久久曰影片| 三级片免费观看久久| 性欧美丰满熟妇XXXX性久久久| 久久精品亚洲精品国产色婷| 久久精品中文字幕久久| 久久精品国产99国产精品| 精品久久久久久久国产潘金莲 | 99久久人人爽亚洲精品美女| 91精品免费久久久久久久久| 久久露脸国产精品| 伊人久久大香线蕉av不卡| 精品久久久久久成人AV| 国产成人99久久亚洲综合精品 | 国内精品久久久久影院老司| 奇米综合四色77777久久| 99久久亚洲综合精品成人| 模特私拍国产精品久久| 精品精品国产自在久久高清| 欧美麻豆久久久久久中文| 久久中文骚妇内射| 亚州日韩精品专区久久久| jizzjizz国产精品久久| 一日本道伊人久久综合影| 日本免费久久久久久久网站| 一本色道久久88精品综合|