public void showtime(object sender, System.Timers.ElapsedEventArgs e)//扫描数据库,每S调用这条函数一次!
{
//System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
ArrayList arrayAirTime = xml.getAirTime();//从配置文件取出设定的时间
ArrayList arrayTable = xml.getTableName();//从配置文件取出表名
//int t = 0;
for (int n = 0; n < arrayTable.Count; n++) //遍历所有的表
{ double m = Convert.ToDouble(arrayAirTime[n]);//从配置文件取出设置好的时间
double t = DB.CheckDB(Convert.ToString(arrayTable[n]));//取出时间差 //if (Convert.ToInt32(DB.checkStaID(Convert.ToString(arrayTable[n]))) == 1 && falg[n] == false)//如果是真,显示黄灯
//{
// this.AlarmStateLbl(Convert.ToString(arrayTable[n]));
//}
if (t > m && falg[n] == false)//判断是否超时
{
DateTime airTimeError = DB.GetTime(Convert.ToString(arrayTable[n]));//取出数据库里最后一条数据的Datatime
ErrorStateLbl(Convert.ToString(arrayTable[n]));//选择那个控件亮红灯
string info = "超时";
DB.InsertError(airTimeError, Convert.ToString(arrayTable[n]), info);//把错误信息插入数据库
falg[n] = true;
}
if (t < m && falg[n] == true)//判断是否恢复
{
DateTime airTimeRestore= DB.GetTime(Convert.ToString(arrayTable[n]));//取出数据库里最后一条数据的Datatime
RestoreStateLbl(Convert.ToString(arrayTable[n]));//选择对应的控件亮绿灯
string info = "恢复";
DB.InsertError(airTimeRestore, Convert.ToString(arrayTable[n]), info);//把恢复信息插入数据库
falg[n] = false;
}
}
}
/// <summary>
/// 取数据库里最后一条数据的Datatime
/// </summary>
/// <param name="tableName"> 取Datatime的表名 </param>
/// <returns> Datatime </returns> public DateTime GetTime(string tableName)
{
//double miao = 0;
DateTime t = DateTime.MinValue;
//DateTime tstart = DateTime.Now;
//strineng r = DateTime.Now.ToString();
cmd.Connection = getCon();
cmd.CommandText = "select TOP 1 * from " + tableName + " order by Datetime desc";
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
t = dr.GetDateTime(1); }
dr.Close();
con.Close();
con.Dispose();
return t;
}
/// <summary>
/// 扫描数据库
/// </summary>
/// <param name="tableName"> 扫描的表 </param>
/// <returns> 数据库最后一条数据的Datatime和目前时间的差 </returns>
public double CheckDB(string tableName)
{
DateTime t = DateTime.MinValue;
cmd.Connection = getCon();
cmd.CommandText = "select TOP 1 * from " + tableName + " order by Datetime desc";
// cmd.CommandText = "select TOP 1 * from date order by id desc";
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
t = dr.GetDateTime(1);
}
dr.Close();
con.Close();
con.Dispose();
TimeSpan ts = new TimeSpan();
ts = DateTime.Now - Convert.ToDateTime(t); //return ts.Days * 24 * 60+ ts.Hours * 60+ ts.Minutes * 60;
return ts.TotalDays;
}
/// <summary>
/// 插入错误表
/// </summary>
/// <param name="time"> 发生错误的时间 </param>
/// <param name="air"> 发生错误的表 </param>
/// <param name="info"> 错误信息 </param>
public void InsertError(DateTime time, string tabelName, string info)
{
cmd.Connection = getCon();
cmd.CommandText = "insert into ErrorInfo(datatime,air,Error) values( '" + time + "','" + tabelName + "', '" + info + "')";
cmd.ExecuteNonQuery();
con.Close();
con.Dispose();
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货