C# DataTable 先读取行再删除行

satdown 2012-06-25 10:30:28
这个DataTable 读取的时候会有新数据不断加入


怎么才能做到读取到不重复的行?


我用的这个方法老是出错,为了防止读取到重复的信息,我只能读取后删除行,但是只要删除行,就会出错!
用for循环的时候datatable中记录少于15000个没问题,但是只要数据量多的情况下,读取到的行,会莫名的多出来几个记录
不知道大家有没有看懂。各位帮帮忙
congxin:
if (tb.Rows.Count > 0)
{


foreach (DataRow dr in tb.Rows)
//for (int i = 0; i < tb.Rows.Count; )
{

string id = dr["id"].ToString();//tb.Rows[i][0].ToString();
string channelID = dr["channelID"].ToString(); //tb.Rows[i][1].ToString();
string terminal_id = dr["terminal_id"].ToString();//tb.Rows[i][2].ToString();

AddM2MData(id, channelID, terminal_id);
//SubmitDelete.Add(id + "," + terminal_id);

//if (tb.Rows.Count > 0)
//{
//dr.Delete();
//dr.Table.Rows.Remove(dr);
//tb.Rows.Remove(dr);//删除已插入表的数据
//}

goto congxin;
}



}
else
{
OutString("暂无数据!");
Thread.Sleep(3000);
}
...全文
397 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
satdown 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

你用for倒序判定即可
也就是从 尾行 向首行读
for(int i=tb.Rows.Count()-1,i>0;i--)
当然现在有linq的话一句话搞定了
[/Quote]

linq怎么用的啊
__天涯寻梦 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
如果另外的地方之插入,可以考虑使用一个全局变量记录读取位置,下次直接从那个位置开始读

C# code
private int dtblIndex = 0;

// 读取
while (true)
{
for (; dtblIndex < tb.Rows.Count; dtblIndex++)
{
DataRow dr = tb.Rows[i];……
[/Quote]
DataRow dr = tb.Rows[dtblIndex];
wanghui0380 2012-06-25
  • 打赏
  • 举报
回复
我来解释一下为啥要从尾行去读,从尾行读取,删除数据的时候,不会影响前面的索引。

而正向读取,你删除的时候,则让你i的索引混乱。


ps:其实正向读取可以不是没解,那就是你不要remove他,只把他用delete标记成删除状态,而后在循环结束以后,直接AcceptChange即可
__天涯寻梦 2012-06-25
  • 打赏
  • 举报
回复
如果另外的地方之插入,可以考虑使用一个全局变量记录读取位置,下次直接从那个位置开始读
private int dtblIndex = 0;

// 读取
while (true)
{
for (; dtblIndex < tb.Rows.Count; dtblIndex++)
{
DataRow dr = tb.Rows[i];

string id = dr["id"].ToString();//tb.Rows[i][0].ToString();
string channelID = dr["channelID"].ToString(); //tb.Rows[i][1].ToString();
string terminal_id = dr["terminal_id"].ToString();//tb.Rows[i][2].ToString();

AddM2MData(id, channelID, terminal_id);
}

Thread.Sleep(3000);
}
assky124 2012-06-25
  • 打赏
  • 举报
回复
只增加一行为什么用Foreach

goto基本上不建议使用了,让代码很慢理解
wanghui0380 2012-06-25
  • 打赏
  • 举报
回复
你用for倒序判定即可

也就是从 尾行 向首行读

for(int i=tb.Rows.Count()-1,i>0;i--)


当然现在有linq的话一句话搞定了

qldsrx 2012-06-25
  • 打赏
  • 举报
回复
没必要删除,你只要记录当前读取的位置,第一条记录的位置是0,每次读取后+1就是读取下一条,如果超过最大行数则停止。每次添加的新行肯定位于最后面,所以不用担心这个顺序读取问题。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧