我試圖保留原始數據表的副本,同時試圖截斷原來的另一個目的。但是,當我截斷原件時,副本也會被截斷。爲什麼在原始截斷時DataTable副本會被截斷?
using (SqlCommand cmd = new SqlCommand(sqlSelect, conn))
{
//Set Time to minute and a half, should not take longer than that!
cmd.CommandTimeout = 90;
DataTable dt = new DataTable();
DataTable copyDt = new DataTable();
//Check the state of the database connection. If closed, then open it.
if (conn.State != ConnectionState.Open)
conn.Open();
dt.Load(cmd.ExecuteReader());
copyDt = dt.Copy();
if (Session["ServiceRequestSearch"] != null)
{
((DataTable)Session["ServiceRequestSearch"]).Clear();
((DataTable)Session["ServiceRequestSearch"]).Dispose();
Session.Remove("ServiceRequestSearch");
}
Session["ServiceRequestSearch"] = copyDt;
if (dt.Rows.Count > take)
for (int i = take; i < dt.Rows.Count; i++)
dt.Rows[i].Delete();
dt.AcceptChanges();
TextBox.Text = dt.Rows.Count + "";
TextBox2.Text = ((DataTable)Session["ServiceRequestSearch"]).Rows.Count + "";
//Close SQL data connection if it is still open.
if (conn.State != ConnectionState.Closed)
conn.Close();
}
它們都顯示相同的行數,即使副本應該高得多。
每個值你肯定行正在從原來的數據表中刪除嗎? – galford13x
如果您只試圖從內存DataTable中刪除行,而不是從底層數據庫中刪除行,那麼您可能會看到使用Remove()而不是Delete()時會發生什麼情況。你也可以嘗試一些Linq代碼像foreach(var row in Rows.Cast().Skip(take)){row.Remove(); } –
sfuqua