“要能保证所有该接受该信息的用户都selchat()执行完后,再dr.delete()就ok了”!!!
在同张页面做,用Datatable.检测新消息,如果满足select条件的用户,就显示聊天内容。(selchat()是return聊天内容) 然后执行下拉,最后删掉纪录。代码类似这样protected void Timer1_Tick(object sender, EventArgs e) //Timer每两秒一次
{
foreach (DataRow dr in Ninfo.N_table.Select("(rec='" + seskf() + "' and fser='" + rid() + "') or (rec='" + rid() + "' and fser='" + seskf() + "')"))
{
selchat();
ScriptManager.RegisterStartupScript(this, this.GetType(), "sp", "sc()", true);
dr.Delete();
}
}这个方法如果在两张页面用两个Datatable做是没有问题的。 但在一张页面用一个Datatable做,,就出现这样的问题:
例如用户A,用户B。用户A给用户B发送消息的时候,用户A看到了消息,用户B却没看到。 或者用户B看到了,用户A却没看到。就是因为dr.delete() 执行过早。selchat()代码
private void selchat()
{
// sql = "select * from fasong where (fser='" + seskf() + "' and recer='" + rid() + "') or (fser='" + rid() + "' and recer='" + seskf() + "') order by fid asc";
DataTable dt = sel.chatsel(seskf(), rid());
string kfid = seskf().ToString();
string fkid = rid().ToString();
string Tmpstr = ""; Label1.Text = "";
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
if (dr["iskefu"].ToString() == "0")
{
Tmpstr = rid() + "访客:" + "[" + dr["fsdate"].ToString() + "]\n" + "<br/>" + dr["Content"].ToString() + "<br/><br/>";
}
if (dr["iskefu"].ToString() == "1")
{
Tmpstr = "您说:" + "[" + (dr["fsdate"].ToString()) + "]\n" + "<br/>" + dr["Content"].ToString() + "<br/><br/>";
}
Label1.Text += Tmpstr;
}
}
string ce = "delete from fkjlcount where (info1='" + rid() + "' and info2='" + Session["kefuing"].ToString() + "') or (info1='" + Session["kefuing"].ToString() + "' and info2='" + rid() + "')";
m.Sql_Dml(ce); }
在同张页面做,用Datatable.检测新消息,如果满足select条件的用户,就显示聊天内容。(selchat()是return聊天内容) 然后执行下拉,最后删掉纪录。代码类似这样protected void Timer1_Tick(object sender, EventArgs e) //Timer每两秒一次
{
foreach (DataRow dr in Ninfo.N_table.Select("(rec='" + seskf() + "' and fser='" + rid() + "') or (rec='" + rid() + "' and fser='" + seskf() + "')"))
{
selchat();
ScriptManager.RegisterStartupScript(this, this.GetType(), "sp", "sc()", true);
dr.Delete();
}
}这个方法如果在两张页面用两个Datatable做是没有问题的。 但在一张页面用一个Datatable做,,就出现这样的问题:
例如用户A,用户B。用户A给用户B发送消息的时候,用户A看到了消息,用户B却没看到。 或者用户B看到了,用户A却没看到。就是因为dr.delete() 执行过早。selchat()代码
private void selchat()
{
// sql = "select * from fasong where (fser='" + seskf() + "' and recer='" + rid() + "') or (fser='" + rid() + "' and recer='" + seskf() + "') order by fid asc";
DataTable dt = sel.chatsel(seskf(), rid());
string kfid = seskf().ToString();
string fkid = rid().ToString();
string Tmpstr = ""; Label1.Text = "";
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
if (dr["iskefu"].ToString() == "0")
{
Tmpstr = rid() + "访客:" + "[" + dr["fsdate"].ToString() + "]\n" + "<br/>" + dr["Content"].ToString() + "<br/><br/>";
}
if (dr["iskefu"].ToString() == "1")
{
Tmpstr = "您说:" + "[" + (dr["fsdate"].ToString()) + "]\n" + "<br/>" + dr["Content"].ToString() + "<br/><br/>";
}
Label1.Text += Tmpstr;
}
}
string ce = "delete from fkjlcount where (info1='" + rid() + "' and info2='" + Session["kefuing"].ToString() + "') or (info1='" + Session["kefuing"].ToString() + "' and info2='" + rid() + "')";
m.Sql_Dml(ce); }
聊天记录 只保留 100条
隔一段时间 清除超过100条的记录