MySql获得更新自上次NOW()异步问题
本文关键字:NOW 异步 问题 更新 MySql | 更新日期: 2023-09-27 18:09:18
我遇到了麻烦,我正试图从我的网络聊天的消息表中获取更新。为此,我将最后日期时间存储在会话中,并尝试获取在最后日期时间和现在之间发送的消息。
然而,它缺少一些信息,我不知道为什么。我的mysql日期时间比较有问题吗?
如果我刷新页面,它会重置会话变量并显示所有消息。在javascript中,我每2 +回调秒调用一次web方法。
private string LastNow
{
get
{
return Session["last_now"] as string ??
(string)(Session["last_now"] = string.Empty);
}
set
{
Session["last_now"] = value;
}
}
[WebMethod(EnableSession=true)]
public object GetMessages(int id, int roomId)
{
string lastDt = LastNow;
/* EDIT */
string now = MySqlHelper.ExecuteScalar(
connstr, "SELECT CAST(NOW() AS CHAR);") as string;
// if the session variable is null or empty,
// get all messages up to now, else most recent
string dtclause =
!string.IsNullOrWhiteSpace(lastDt) ?
string.Format(" AND sent_dt > '{0}' AND sent_dt <= '{1}'", lastDt, now) :
string.Format(" AND sent_dt <= '{0}'", now);
string sql =
string.Format(
"SELECT user_id, type, message FROM Chat.Message WHERE room_id={0}{1};",
roomId, dtclause);
object ret = null;
try // with a finally, always store last update time
{
using (DataSet msgset =
MySqlHelper.ExecuteDataset(Common.SupportDatabase, sql))
{
DataTable msgtable = msgset.Tables[0];
if (msgtable != null)
{
DataRow[] rows = msgtable.Select();
if (rows != null && rows.Length > 0)
{
ret = from msg in rows
select new
{
id = msg["user_id"],
type = msg["type"],
message = msg["message"]
};
}
}
}
}
finally
{
LastNow = now;
}
return ret;
}
不应该有任何理由在代码中进行日期解析。MySQL已经以yyyy-mm-dd hh:mm:ss
格式输出now()
函数,所以只需存储MySQL返回的原始字符串。DateTime解析可能会导致时区和夏令时转换之类的事情,这会把时间戳搞砸。相反,只需取出时间戳,然后把它塞回去,不进行转换。
我怀疑是因为您计算NOW()的时间比执行查询的时间稍早,所以遗漏了介于两者之间的一些消息。尝试在获取消息的相同查询中从db中获取日期。