private void btnLxcw_Click(object sender, EventArgs e)
        {
            DataTable oleta = new DataTable();
            OleDbDataAdapter olda = new OleDbDataAdapter("select id from name where ch='2'", oleconn);
            olda.Fill(oleta); 
            int mst = 2;
            int i = oleta.Rows.Count;
            for (int k = 0; k < i; )
            {
                for (int t = 0; t < mst; t++)
                {
                    MessageBox.Show("i=" + i.ToString() + ";     k= " + (k + 1).ToString() + ";   t=" + t.ToString());
                    k++;
                    if (k >= i)
                    {
                        break;
                    }
                }
            }
        }
i=oleta.Rows.Count;得到的值为2,第一次点的时候得到:
i=2;k=1;t=0;
i=2;k=2;t=1;
第二点的时候为何得到:
i=4;k=1;t=0;
i=4;k=2;t=1;
i=4;k=3;t=0;
i=4;k=4;t=1;
为什么会出现这样的问题,才高手。

解决方案 »

  1.   

    select id from name where ch='2'
    你看看有几条记录
      

  2.   

    直接用oleta.Count
    DataRow的版本太多,试验起来复杂...
      

  3.   

    如果后台数据库的数据没有变动的话,那确实问题比较新鲜!
    因为每次进去都会创建一个新的 DataTable 对象的,照理说应该是
    每次一样才是。
      

  4.   

    是的,数据库里的数据没有增加,还是两条。这里就是弄不明白了。
    把i = oleta.Rows.Count改成i = 4;就没有问题。所以说问题的根源还是i = oleta.Rows.Count;
      

  5.   

    DataTable oleta = new DataTable();后面加上
    oleta.Clear()
    看一下
      

  6.   

    调试一下,看再次点击后,oleta的内容是什么?是两条还是四条?
    一直跟踪监视oleta 
      

  7.   

    没天理,那样可以的话,这样也行。
    DataTable oleta = null;
    oleta = new DataTable();
      

  8.   

    你这个表在第一次创建时,在内存里就有表,这个表数据你并没有释放,你不管new多少次都是这个表,只要你点一次就加上同样的2条数据,所在处理这个时一定要先CLEAR这个表再FILL这不会有这种情况了。
      

  9.   

    oleconn没有释放吧,DataTable 和OleDbDataAdapter 都是新建的,所以不会有问题,但是oleconn没有新建,检查下这个是否有问题,你也新建连接试试。