我试图保留原始数据表的副本,同时试图截断原来的另一个目的。但是,当我截断原件时,副本也会被截断。为什么在原始截断时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