背景 ASP.NET页面上的两个按钮。
按钮1: 数据被加载到DataSet中。 会话变量,会话[" a"]和会话[" b"]被分配给数据集。
按钮2: 会话[" a"]被强制转换为DataSet。记录将从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 :(得分:0)
会话a和会话b保存对内存中数据集位置的引用。所以基本上a和b只是同一个东西的两个不同名称。
https://msdn.microsoft.com/en-us/library/490f96s2.aspx
如果您希望b保持不变,则可以创建具有相同初始数据的两个数据集。将一组分配给a,将一组分配给b。