我做了一个MyQQ的小项目,遇到了如下问题:
1.引入了一个计时器(tmrScanDataBase),让其定时扫描数据库,当有好友发来聊天消息时,启动另一个计时器(tmrFlicker)让该好友头像闪动。
2.问题来了,当tmrScanDataBase定时扫描数据库时,如果没查询出符合条件的结果时,就报错。
3.我想要的结果是,让tmrScanDataBase定时扫描数据库,没查出结果时,就继续扫描。有查询结果时,启动另一个计时器(tmrFlicker)。
4.有没有老师能帮帮忙!!我实在是有点黔驴技穷了!!代码如下:
  //定时扫描数据库,查看是否有"未读的" "普通聊天消息"
        private void tmrScanDataBase_Tick(object sender, EventArgs e)
        {
            /*
             * UserHelpper.HostId:当前登录的用户qq号
             * messagestate:0未读,1已读
             *  messagetypeid:1普通聊天消息,2添加好友消息
             */
            string sql = string.Format("select fromuserid from messages where touserid={0} and messagestate={1} and messagetypeid={2}", UserHelpper.HostId, 0, 1);            /*
             * 这个地方要对查不到的情况,要拦截拦截一下,给出提示
             */
            try
            {
                DBHelpper.connectionObj.Open();//打开数据库连接
                SqlCommand commandObj = new SqlCommand(sql, DBHelpper.connectionObj);
                friendId = (int)commandObj.ExecuteScalar();//只查看出一个,"来消息"的好友id
                                     }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "数据库出错3", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {              
                DBHelpper.connectionObj.Close();//关闭数据库连接            }
           
            if (friendId!=0 )//查出来了
            {                tmrFlicker.Enabled = true;
            }        }

解决方案 »

  1.   

    你可以在数据库里面设置一个标识   当有新的消息的时候  那个标识就改变一下  然后你扫描就去读取标识就行了  这是其中的一种方法     还有就是你说的那个timer控件  定时去查看数据库就行了  如果是有数据的就执行你另外一个tiemr  没有的就跳出来就行了
      

  2.   

    我终于想到怎么解决了!!
    1.之所以回报错是因为,没查询到结果,我使用了try{}catch(){}finally{}语句,来防止程序异常。
      将catch语句内的消息框注释掉,就可以了。
    2.这样就可以达到这样的效果了:
    让tmrScanDataBase定时扫描数据库,没查出结果时,就继续扫描。有查询结果时,启动另一个计时器(tmrFlicker)