2016-04-21 38 views
1

背景: ASP.NET頁面上的兩個按鈕。當一個會話更新時,爲什麼不同的會話變量更改值?

按鈕1: 數據被加載到一個數據集。 2會話變量,會話[「a」]和會話[「b」]分配給DataSet。

按鈕2: 會話[ 「一個」]被轉換爲數據集。記錄從DataSet中刪除。

問題:

中的AcceptChanges之前()函數被調用,無論Session變量發生變化,以反映刪除操作(Rows.Count爲1以下)。爲什麼會發生?

當然DataSet「ds」不能再存在嗎?

protected void Button1_Click(object sender, EventArgs e) 
    { 

     string StringContainingSQLConnection = @"server=someserver;database=Standby;uid=StandbyUser;password=pass;"; 
     SqlDataAdapter adp = new SqlDataAdapter("select * from CoreData", StringContainingSQLConnection); 
     DataSet ds = new DataSet(); 
     adp.Fill(ds); 

     Session["a"] = ds; 
     Session["b"] = ds; 
    } 

    protected void Button2_Click(object sender, EventArgs e) 
    { 
     DataSet ds = ((DataSet)Session["a"]); 

     foreach (DataRow drw in ds.Tables[0].Rows) 
     { 
      drw.Delete(); 
      ds.AcceptChanges(); 
      Session["a"] = ds; 
      break; 
     } 
    } 

爲了清楚起見,我在foreach循環中刪除了條件IF語句,只是刪除第一條記錄來證明這一點。

+0

Joshua的回答是正確的。您可能需要設置會話[「b」] = ds.Copy(),因爲它會創建一個新的數據集,它是原始數據的副本。 – momar

+0

thanx momar。你的.Copy()做了訣竅。非常感激。 –

回答

0

會話a和會話b持有對數據集在內存中的位置的引用。所以基本上,a和b只是兩個不同的名字。

https://msdn.microsoft.com/en-us/library/490f96s2.aspx

如果你想對於B保持不變,您可以創建兩個數據集具有相同的初始數據。將一組分配給a,將一組分配給b。