[圖解] SqlDataSource 開放式並行存取 (Optimistic Concurrency),以GridView為例

摘要:[圖解] SqlDataSource 開放式並行存取 (Optimistic Concurrency),以GridView為例



 

 

完整說明,還是以 msdn官方網站為主。

開放式並行存取
Optimistic Concurrency
 
 
 
===================================================================
我錄製好的教學影片:
 
 
 
===================================================================
 
 
 
其實每個人都可以自己實驗出來
 
首先,開啟 SqlDataSource的「進階」按鈕,並啟動「開放式並行存取」
 
      
 
 
 
自己打開兩個瀏覽器,模擬兩個人「同時」編輯「同一筆記錄」
 
 
      
 
 
      
 
 
使用者A先去修改完成
使用者B要改就會無效!
 
因為回寫時,發現資料已經不是原本的樣子,被人改過了,所以不准修改。
 
      
 
 
 
 
 
您自己寫程式(後置程式碼)
 
GridView的 RowUpdating事件裡面,使用參數e會看見這兩個朋友
 
      e.OldValues["資料表的欄位名稱"]
 
      e.NewValues["資料表的欄位名稱"] ......  VB語法請把 [ ] 改成 ( ) 小括號即可
 
就是「開放式並行存取」的原貌,自己寫程式就能看到更多事情。
 
 
 
 
如果您實作發生問題,可能是資料表的欄位設定(資料型態)有誤
 
      我以前存放大量的文字資料,會使用 Text資料型態
      在.NET 2.0 (VS 2005)運作正常,但後續就無法使用「開放式並行存取」了
 
      後來,微軟建議改用 nVarChar(MAX)或是 VarChar(MAX)取代原先的 Text資料型態
      就正常囉。
 
 
 
 
******************************************************************************************************************

完整說明,還是以 msdn官方網站為主。

開放式並行存取
Optimistic Concurrency
 
 
******************************************************************************************************************
 
 
 
 
如果您要找 DataSet的程式碼,也能展示「開放式並行存取」
可以參考我以前發表過的文章:
 
 
 
MSDN的說法是:
 
下列範例示範如何明確設定 DataAdapter 的 UpdateCommand 並呼叫其 Update 方法,藉以更新已修改的資料列。 請注意,在 UPDATE 陳述式之 WHERE 子句中指定的參數是設定為使用 SourceColumn 的 Original 值。 這一點相當重要,因為 Current 值可能已經修改,而不符合資料來源中的值。 Original 值是用來填入資料來源之 DataTable 的值。
 
 
    using (SqlConnection conn =   new SqlConnection("DB連結字串"))
    {
        SqlDataAdapter dataAdpater = new SqlDataAdapter("SELECT * FROM test資料表", conn);
 
        DataTable categoryTable = new DataTable();
        dataAdpater.Fill(categoryTable);
 
        DataRow categoryRow = categoryTable.Rows[0];
        categoryRow["CategoryName"] = "New Beverages";
 
        dataAdpater.UpdateCommand = new SqlCommand( "UPDATE test資料表 SET CategoryName = @CategoryName WHERE CategoryID = @CategoryID", conn);
 
        dataAdpater.UpdateCommand.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");
 
        SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add("@CategoryID", SqlDbType.Int);
        parameter.SourceColumn = "CategoryID";
        parameter.SourceVersion = DataRowVersion.Original;
 
          // 屬性值
          // 類型:System.Data.DataRowVersion
          // 其中一個 DataRowVersion 值。 預設值為 Current。 
         // SqlDataAdapter.UpdateCommand 會在更新期間使用這個屬性,以判斷參數值是否使用原始或目前的值。 這可以更新主索引鍵。
 
        dataAdpater.Update(categoryTable);
    }
 
 
 
 
 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估