none
並行違規問題請教 RRS feed

  • 問題

  •  

    各位前輩,以下代碼是我在看了章立民老師的教程後修改後的代碼,修改時不會有問題,現在問題是當有兩人同時開啟同一個form,當時看到的資料是一樣的,其中一個人刪除了第一筆資料存檔後,第二個人也去刪除第一筆資料,存檔時就會出現錯誤:無法經由資料列存取已刪除的資料列資訊。

    ......

                    catch (DBConcurrencyException dbcx)
                    {
                        createMessage(dbcx);
                    }

     

     

            private void createMessage(DBConcurrencyException dbcx)
            {
                string strconn = data.GetConnectionString("ERPConn");
                SqlConnection conn = new SqlConnection(strconn);

                string strPromptText = "您是否要以資料集當中的目前資料列來覆寫資料庫中的目前資料列?"; 

                string strMessage;
                DialogResult response;

                ds.Tables.Clear();
                SqlDataAdapter sda = new SqlDataAdapter("select * from CustomerClass where classno=@classno", conn);
                SqlParameter para=sda.SelectCommand.Parameters.Add("@classno", SqlDbType.VarChar, 4);
                para.Value = dbcx.Row["classno"];

                int nAffectedRows = sda.Fill(ds, "CustomerClass");

                if (nAffectedRows > 0)
                {
                    DataRow rowInDB = ds.Tables["customerclass"].Rows[0];
                    response = MessageBox.Show(strPromptText, "更新失敗,發生並行違規...", MessageBoxButtons.YesNo);
                    processResponse(response);
                }
                else
                {
                    strMessage = "您所要寫回的資料列,在資料來源上已經被其他使用者刪除," +"我們也將從資料集當中刪除此一資料列。";
                    MessageBox.Show(strMessage, "更新失敗,發生並行違規...", MessageBoxButtons.OK);
                    erpDataSet1.CustomerClass.Rows[bsCustomerClass.Position].Delete();
                    erpDataSet1.CustomerClass.AcceptChanges();
                }
            }

     

     

    2008年11月21日 下午 12:54

解答