C# 在C中从数据表中删除行#
我正在搜索PDF文件中的关键字,并返回找到该关键字的页面。如果找到关键字,我将返回页面列表和文件名。但是,如果在PDF文件中找不到关键字,我想删除datatable中的行C# 在C中从数据表中删除行#,c#,datatable,C#,Datatable,我正在搜索PDF文件中的关键字,并返回找到该关键字的页面。如果找到关键字,我将返回页面列表和文件名。但是,如果在PDF文件中找不到关键字,我想删除datatable中的行 public DataTable dtPubSearchResultsFromFiles(string sqlQuery, string safeKeyword) { // Returns a datatable of publication search results based on PDF files.
public DataTable dtPubSearchResultsFromFiles(string sqlQuery, string safeKeyword)
{
// Returns a datatable of publication search results based on PDF files.
SqlConnection con = new SqlConnection(getConnectionString());
SqlCommand cmd = new SqlCommand(sqlQuery, con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
dt.Columns.Add("Pages", typeof(string));
da.Fill(dt);
dt.PrimaryKey = new DataColumn[] { dt.Columns["publicationID"] };
foreach (DataRow row in dt.Rows)
{
//call search function to look for keyword
List<int> myPages = new List<int>();
string fileName = row["linkToPublicationPDF"].ToString();
myPages = ReadPdfFile(fileName, safeKeyword);
if (myPages.Count > 0)
{
string pagelist = "";
foreach (int page in myPages)
{
pagelist = pagelist + page + " ";
}
row["Pages"] = pagelist;
}
else
{
//remove/delete the row from the datatable if "myPages.Count" is 0
dt.Rows.Remove(row);
}
}
return dt;
}
公共数据表dtPubSearchResultsFromFiles(字符串sqlQuery,字符串safeKeyword)
{
//返回基于PDF文件的出版物搜索结果的datatable。
SqlConnection con=新的SqlConnection(getConnectionString());
SqlCommand cmd=新的SqlCommand(sqlQuery,con);
SqlDataAdapter da=新的SqlDataAdapter(cmd);
DataTable dt=新的DataTable();
添加(“页面”,类型(字符串));
da.填充(dt);
dt.PrimaryKey=newdatacolumn[]{dt.Columns[“publicationID”]};
foreach(数据行中的数据行)
{
//调用搜索函数查找关键字
List myPages=新列表();
字符串文件名=行[“LinkTopPublicationPDF”]。ToString();
myPages=ReadPdfile(文件名、关键字);
如果(myPages.Count>0)
{
字符串pagelist=“”;
foreach(myPages中的整版页面)
{
页面列表=页面列表+页面+“”;
}
行[“页面”]=页面列表;
}
其他的
{
//如果“myPages.Count”为0,则从数据表中删除/删除该行
dt.行。删除(行);
}
}
返回dt;
}
当我添加这个(“dt.Rows.Remove(row)”)时,当页面被称为“System.InvalidOperationException:集合被修改;枚举操作可能无法执行”时,我会出现此错误
建议?评论?修复?欢迎大家
Bob尝试一个简单的删除
row.Delete();
然后在循环之后
dt.AcceptChanges();
但它可能会失败参见马里奥的答案
如果它实际上只是将行标记为删除,那么它可能会起作用尝试简单的删除
row.Delete();
然后在循环之后
dt.AcceptChanges();
但它可能会失败参见马里奥的答案
如果它实际上只是标记要删除的行,那么它可能会工作您的代码正在从数据库中获取一些数据,以便您的程序可以使用它 您遇到的异常是,您正在修改(通过删除元素)正在迭代的集合,而这是不可能的 您可以通过创建一个临时的
列表来解决这个问题,您可以在其中存储要删除的行。完成迭代后,您可以在临时列表上进行迭代,并删除您决定不再需要的内容
var toRemove = new List<DataRow>();
foreach (DataRow row in dt.Rows)
{
//call search function to look for keyword
List<int> myPages = new List<int>();
string fileName = row["linkToPublicationPDF"].ToString();
myPages = ReadPdfFile(fileName, safeKeyword);
if (myPages.Count > 0)
{
string pagelist = "";
foreach (int page in myPages)
{
pagelist = pagelist + page + " ";
}
row["Pages"] = pagelist;
}
else
{
//remove/delete the row from the datatable if "myPages.Count" is 0
toRemove.Add(row);
}
}
}
foreach (DataRow row toRemove.Add)
{
dt.Rows.Remove(row);
}
var toRemove=new List();
foreach(数据行中的数据行)
{
//调用搜索函数查找关键字
List myPages=新列表();
字符串文件名=行[“LinkTopPublicationPDF”]。ToString();
myPages=ReadPdfile(文件名、关键字);
如果(myPages.Count>0)
{
字符串pagelist=“”;
foreach(myPages中的整版页面)
{
页面列表=页面列表+页面+“”;
}
行[“页面”]=页面列表;
}
其他的
{
//如果“myPages.Count”为0,则从数据表中删除/删除该行
删除。添加(行);
}
}
}
foreach(DataRow-row-toRemove.Add)
{
dt.行。删除(行);
}
您的代码正在从数据库中获取一些数据,以便您的程序可以使用这些数据
您遇到的异常是,您正在修改(通过删除元素)正在迭代的集合,而这是不可能的
您可以通过创建一个临时的列表来解决这个问题,您可以在其中存储要删除的行。完成迭代后,您可以在临时列表上进行迭代,并删除您决定不再需要的内容
var toRemove = new List<DataRow>();
foreach (DataRow row in dt.Rows)
{
//call search function to look for keyword
List<int> myPages = new List<int>();
string fileName = row["linkToPublicationPDF"].ToString();
myPages = ReadPdfFile(fileName, safeKeyword);
if (myPages.Count > 0)
{
string pagelist = "";
foreach (int page in myPages)
{
pagelist = pagelist + page + " ";
}
row["Pages"] = pagelist;
}
else
{
//remove/delete the row from the datatable if "myPages.Count" is 0
toRemove.Add(row);
}
}
}
foreach (DataRow row toRemove.Add)
{
dt.Rows.Remove(row);
}
var toRemove=new List();
foreach(数据行中的数据行)
{
//调用搜索函数查找关键字
List myPages=新列表();
字符串文件名=行[“LinkTopPublicationPDF”]。ToString();
myPages=ReadPdfile(文件名、关键字);
如果(myPages.Count>0)
{
字符串pagelist=“”;
foreach(myPages中的整版页面)
{
页面列表=页面列表+页面+“”;
}
行[“页面”]=页面列表;
}
其他的
{
//如果“myPages.Count”为0,则从数据表中删除/删除该行
删除。添加(行);
}
}
}
foreach(DataRow-row-toRemove.Add)
{
dt.行。删除(行);
}
谢谢Marios。这似乎解决了我问题的第一部分。谢谢马里奥斯。它似乎解决了我问题的第一部分。