Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySql从上一次开始获取更新()异步问题_C#_Mysql_Web Services_Select_Where Clause - Fatal编程技术网

C# MySql从上一次开始获取更新()异步问题

C# MySql从上一次开始获取更新()异步问题,c#,mysql,web-services,select,where-clause,C#,Mysql,Web Services,Select,Where Clause,我遇到了问题,我正在尝试从我的网络聊天的消息表中获取更新。为此,我将上次日期时间存储在会话中,并尝试在上次日期时间和现在之间发送消息 然而,它丢失了一些信息,我不知道为什么。我的mysql日期时间比较有问题吗 如果我刷新页面,它将重置会话变量并显示所有消息。在javascript中,我每隔2秒以上的回调调用一次web方法 private string LastNow { get { return Session["last_now"] as string ??

我遇到了问题,我正在尝试从我的网络聊天的消息表中获取更新。为此,我将上次日期时间存储在会话中,并尝试在上次日期时间和现在之间发送消息

然而,它丢失了一些信息,我不知道为什么。我的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;
}
private字符串LastNow
{
得到
{
以字符串形式返回会话[“最近一次”]??
(string)(Session[“last_now”]=string.Empty);
}
设置
{
Session[“last_now”]=值;
}
}
[WebMethod(EnableSession=true)]
公共对象GetMessages(int-id,int-roomId)
{
字符串lastDt=LastNow;
/*编辑*/
string now=MySqlHelper.ExecuteScalar(
connstr,“选择CAST(现在()作为CHAR);”)作为字符串;
//如果会话变量为null或空,
//获取到目前为止的所有消息,或者最新消息
字符串DT子句=
!string.IsNullOrWhiteSpace(lastDt)?

string.Format(“AND sent_dt>'{0}'AND sent_dt应该没有任何理由在代码中进行日期解析。MySQL将已经输出
now()
函数采用
yyyy-mm-dd hh:mm:ss
格式,因此只需存储MySQL返回的原始字符串。DateTime解析可能会导致时区和夏令时转换之类的事情,这将破坏TIMStamp。相反,只需抽出时间戳,并将其重新填充,不进行转换。

我怀疑是因为e计算NOW()比执行查询稍早一点,您丢失了一些介于两者之间的消息。请尝试在获取消息的同一查询中从数据库中获取日期。

.Net mysql连接器将“SELECT NOW()”值存储为MySqlDateTime数据类型,而不是本机字符串。:-(您可以使用
CAST(now()AS varchar)
DATE\u格式(now()“%Y-%m-%d%h:%i:%s”)强制执行字符串。
varchar对我不起作用(可能是MySql的一个怪癖),但“CAST(now()AS CHAR)”起作用:尽管这似乎有帮助(没有任何经验证据),它并没有完全解决问题。我认为这与我的发送(插入)的异步性质有关。我放弃了此方法,消息具有自动递增ID,因此我可以随时跟踪最近一次发送的消息,但如果不在整列中填入now()另外,调试webservice会显示这些值是有效的范围(应该返回结果)。我想我与插入有更多的关系。