我在从数据表中删除行时遇到问题。在我的程序中,我使用sql查询将数据库中的信息读入数据表。我使用oledb连接和代码dt.Load(command.ExecuteReader());
来执行此操作。稍后,我想删除与id字符串匹配的行。我试过以下代码购买无法让它工作:
DataRow[] drr = dt.Select("Student=' " + id + " ' ");
for (int i = 0; i < drr.Length; i++)
dt.Rows.Remove(drr[i]);
dt.AcceptChanges();
任何人都可以用一个例子来建议另一种方式吗?
答案 0 :(得分:17)
尝试使用Delete方法:
DataRow[] drr = dt.Select("Student=' " + id + " ' ");
for (int i = 0; i < drr.Length; i++)
drr[i].Delete();
dt.AcceptChanges();
答案 1 :(得分:3)
有几种不同的方法可以做到这一点。但您可以使用以下方法:
List<DataRow> RowsToDelete = new List<DataRow>();
for (int i = 0; i < drr.Length; i++)
{
if(condition to delete the row)
{
RowsToDelete.Add(drr[i]);
}
}
foreach(var dr in RowsToDelete)
{
drr.Rows.Remove(dr);
}
答案 2 :(得分:2)
这个问题将为您提供有关如何从DataTable中删除记录的深入见解:
DataTable, How to conditionally delete rows
看起来像这样:
DataRow[] drr = dt.Select("Student=' " + id + " ' ");
foreach (var row in drr)
row.Delete();
不要忘记,如果要更新数据库,则需要调用Update命令。有关详细信息,请参阅此链接:
答案 3 :(得分:0)
我认为OP代码不起作用的原因是因为一旦你调用Remove你正在改变drr的长度。当您调用Delete时,实际上不会删除该行,直到调用AcceptChanges。这就是为什么如果你想使用Remove你需要一个单独的循环。
视情况或偏好而定......
string colName = "colName";
string comparisonValue = (whatever it is).ToString();
string strFilter = (dtbl.Columns[colName].DataType == typeof(string)) ? "[" + colName + "]='" + comparisonValue + "'" : "[" + colName + "]=" + comparisonValue;
string strSort = "";
DataRow[] drows = dtbl.Select(strFilter, strSort, DataViewRowState.CurrentRows);
以上用于下两个例子
foreach(DataRow drow in drows)
{
drow.Delete();//Mark a row for deletion.
}
dtbl.AcceptChanges();
OR
foreach(DataRow drow in drows)
{
dtbl.Rows[dtbl.Rows.IndexOf(drow)].Delete();//Mark a row for deletion.
}
dtbl.AcceptChanges();
OR
List<DataRow> listRowsToDelete = new List<DataRow>();
foreach(DataRow drow in dtbl.Rows)
{
if(condition to delete)
{
listRowsToDelete.Add(drow);
}
}
foreach(DataRow drowToDelete in listRowsToDelete)
{
dtbl.Rows.Remove(drowToDelete);// Calling Remove is the same as calling Delete and then calling AcceptChanges
}
请注意,如果调用Delete(),则应调用AcceptChanges(),但如果调用Remove(),则不需要AcceptChanges()。
答案 4 :(得分:0)
我使用Remove方法和其他人使用Delete方法查看了许多答案。
删除(根据文档)将立即从(本地)表中删除记录,并且在更新时,不会删除丢失的记录。
比较删除将RowState更改为Deleted,并将更新Update上的服务器表。同样,在更新服务器表之前调用AcceptChanges方法会将所有RowState重置为Unchanged,并且任何内容都不会流向服务器。 (在多次击中之后仍然护理我的拇指)。
答案 5 :(得分:0)
如果您想从 DataTable 中删除整行,
试试这个
DataTable dt = new DataTable(); //User DataTable
DataRow[] rows;
rows = dt.Select("Student=' " + id + " ' ");
foreach (DataRow row in rows)
dt.Rows.Remove(row);
答案 6 :(得分:0)
高级for loop
在这种情况下效果更好
public void deleteRow(DataRow selectedRow)
{
foreach (DataRow in StudentTable.Rows)
{
if (SR[TableColumn.StudentID.ToString()].ToString() == StudentIndex)
SR.Delete();
}
StudentTable.AcceptChanges();
}
答案 7 :(得分:-1)