请教while遍历的问题

时间:2022-12-13 15:32:22
string sql = "select * from sword where ctype="+1+" order by cdate desc";
                MySqlConnection conn = new MySqlConnection(connStr);
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                conn.Open();
                MySqlDataReader rd = cmd.ExecuteReader();
                while(rd.Read())
                {
                    zcname = rd["cname"].ToString();
                    t1.Interval = 1000;
                    t1.Tick += new EventHandler(tt_Tick);
                    t1.Start();
                }
我的意图是读出所有记录,每读出一条记录就执行一下大括号里的程序,可是我用while好像总是不正常,每次只能读出zcname,下面的不执行,请问为什么啊??

13 个解决方案

#1


既然是只要执行方法,那为何使用timer?
而且每条数据都绑定t1.Tick += new EventHandler(tt_Tick);
那每次事件累加,不会出问题吗?

#2


是不执行tt_Tick

#3


每次只能读出zcname
-》因为你只rd["cname"]了,没有rd其它的列名称。

#4


是没有执行t1.Tick += new EventHandler(tt_Tick);

#5


1、同一个timer,你多次绑定Tick事件,估计会有问题
2、你可以把timer的Tick事件作为方法,每次调用
3、你认为代码木有执行,可以打个断点,单步调试下

#6


如果我用if语句读出的一条记录,则
t1.Interval = 1000;
t1.Tick += new EventHandler(tt_Tick);
t1.Start();
运行正常,如果用while语句,则这个定时器就不起作用了,为什么啊???

#7


引用 4 楼 zky0901 的回复:
是没有执行t1.Tick += new EventHandler(tt_Tick);


+= 是什么意思啊?

#8


引用 6 楼 zky0901 的回复:
如果我用if语句读出的一条记录,则
t1.Interval = 1000;
t1.Tick += new EventHandler(tt_Tick);
t1.Start();
运行正常,如果用while语句,则这个定时器就不起作用了,为什么啊???


因为你不断地执行 t1.Start 重新开始定时。

#9


引用 楼主 zky0901 的回复:
可是我用while好像总是不正常,每次只能读出zcname,下面的不执行,请问为什么啊??


你的 zcname 总是被丢弃,这样做毫无意义。如果你仅仅只需要最后一条记录的 cname 值,那么直接查询最后一条记录就好了。如果你需要先把所有的 cname 值查询出来,也要把有关定时器的内容放到 while 循环后边,而循环中只应该是把 cname 值保存在一个集合里边。

你的代码,基本上,在保存数据(zcname)方面的流程就没有做到,更别说是异步的定时器访问数据了。你应该自己调试一下,甚至是先把精力放到 想想该测试和调试什么内容上。

#10


为什么不用MySqlAdapter 呢?

#11


  t1.Tick -= new EventHandler(tt_Tick);
  t1.Tick += new EventHandler(tt_Tick);
可以保证只挂了一个事件,如果之前没有设置过,-=也不会出错

#12


 你得先告诉我们你写的这些代码是为了干什么?

#13


最好的办法就是单步执行 F11 请教while遍历的问题

#1


既然是只要执行方法,那为何使用timer?
而且每条数据都绑定t1.Tick += new EventHandler(tt_Tick);
那每次事件累加,不会出问题吗?

#2


是不执行tt_Tick

#3


每次只能读出zcname
-》因为你只rd["cname"]了,没有rd其它的列名称。

#4


是没有执行t1.Tick += new EventHandler(tt_Tick);

#5


1、同一个timer,你多次绑定Tick事件,估计会有问题
2、你可以把timer的Tick事件作为方法,每次调用
3、你认为代码木有执行,可以打个断点,单步调试下

#6


如果我用if语句读出的一条记录,则
t1.Interval = 1000;
t1.Tick += new EventHandler(tt_Tick);
t1.Start();
运行正常,如果用while语句,则这个定时器就不起作用了,为什么啊???

#7


引用 4 楼 zky0901 的回复:
是没有执行t1.Tick += new EventHandler(tt_Tick);


+= 是什么意思啊?

#8


引用 6 楼 zky0901 的回复:
如果我用if语句读出的一条记录,则
t1.Interval = 1000;
t1.Tick += new EventHandler(tt_Tick);
t1.Start();
运行正常,如果用while语句,则这个定时器就不起作用了,为什么啊???


因为你不断地执行 t1.Start 重新开始定时。

#9


引用 楼主 zky0901 的回复:
可是我用while好像总是不正常,每次只能读出zcname,下面的不执行,请问为什么啊??


你的 zcname 总是被丢弃,这样做毫无意义。如果你仅仅只需要最后一条记录的 cname 值,那么直接查询最后一条记录就好了。如果你需要先把所有的 cname 值查询出来,也要把有关定时器的内容放到 while 循环后边,而循环中只应该是把 cname 值保存在一个集合里边。

你的代码,基本上,在保存数据(zcname)方面的流程就没有做到,更别说是异步的定时器访问数据了。你应该自己调试一下,甚至是先把精力放到 想想该测试和调试什么内容上。

#10


为什么不用MySqlAdapter 呢?

#11


  t1.Tick -= new EventHandler(tt_Tick);
  t1.Tick += new EventHandler(tt_Tick);
可以保证只挂了一个事件,如果之前没有设置过,-=也不会出错

#12


 你得先告诉我们你写的这些代码是为了干什么?

#13


最好的办法就是单步执行 F11 请教while遍历的问题