public static bool checkbtn1() { using (cDBMysql cdb = new cDBMysql("dbwebConfig.ini", 1)) { if(cdb.ExecuteScalar("select bt_trigger from button_action whereid='1'").ToString() == "1" && cdb.ExecuteScalar("selectavailable from button_action where id='1'").ToString() == "1") { cdb.executeSql("updatebutton_action set bt_trigger='0'where id='1'");//清除是否触发数据,在执行方法的时候,每个按钮都要 return true; } else return false; } }
FAT需要的5个按钮基本上都是这个套路,拿两句selsct语句查找db相应栏位若满足触发条件,先把是否触发置0,然后return一个数值向下执行,不满足就return不能执行的值或者干脆不return。
功能是可以实现,可是短短一个判断要读数据库3次,浪费资源,怎样才能尽可能减少访问次数,我把两句select放在datatable里,用rows[][]来判断,满足条件才进来这个方法。这写在一个每秒跑10次的线程里,不停的刷数据库。代码为
private void ButtonInteraction()//线程每0.1秒执行一次 { while (1 == 1) { DataTable dt1 =aaa.checktable(); for (int i = 0; i <dt1.Rows.Count; i++) { if (dt1.Rows[i]["是否触发"].ToString() =="1" && dt1.Rows[i]["是否禁用"].ToString() == "1") { if (dt1.Rows[i]["按钮名称"].ToString() == "登陆") DengLu(false);//checkbtn36(); else if(dt1.Rows[i]["按钮名称"].ToString() == "自检") ZiJian(false);//checkbtn1(); else if (dt1.Rows[i]["按钮名称"].ToString() == "启动") QiDong(false);//checkbtn2(); else if(dt1.Rows[i]["按钮名称"].ToString() == "调度停止") TingZhi(false);//checkbtn3(); else if(dt1.Rows[i]["按钮名称"].ToString() == "手动任务") HandMission(false);// checkbtn35(); } else continue; } Thread.Sleep(100);//停0.1秒 } }
现在方法就很简便了。
public static bool checkbtn1() { using (cDBMysql cdb = new cDBMysql("dbwebConfig.ini", 1)) { cdb.executeSql("updatebutton_action set bt_trigger='0'where id='1'");//清除是否触发数据,在执行方法的时候,每个按钮都要 return true; } }