我做了一个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.引入了一个计时器(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.之所以回报错是因为,没查询到结果,我使用了try{}catch(){}finally{}语句,来防止程序异常。
将catch语句内的消息框注释掉,就可以了。
2.这样就可以达到这样的效果了:
让tmrScanDataBase定时扫描数据库,没查出结果时,就继续扫描。有查询结果时,启动另一个计时器(tmrFlicker)