【问题标题】:DateTime.Now to mysql datetimeDateTime.Now 到 mysql 日期时间
【发布时间】:2010-09-03 12:43:00
【问题描述】:

我遇到了查询问题,得到了类似的东西

command.CommandText = "SELECT " +
        "COUNT(a.`id`) " +
   "FROM " +
        "`messageaccess` a " +
   "WHERE " +
        "a.`Users_LOGIN` = '" + Settings.UserLogin + "' " +
        "AND a.`Status` = '" + Enums.MessageStatus.New + "' " +
        "AND a.`FOLDER` = '" + Enums.MessageFolder.INBOX + "'" +
        "AND a.`ShowAlert` = '" + Enums.YesNo.No + "'" +
        "AND a.`Postponed` <= " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "";

但是 sql 抛出异常 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“14:40:37”附近使用正确的语法

尝试了不同的组合,但没有任何效果:(

【问题讨论】:

标签: c# mysql datetime


【解决方案1】:

简单的答案是不要将值直接嵌入到 SQL 中。

使用参数化的SQL语句,将参数值指定为DateTime.Now,就万事大吉了:

  • 您的 SQL 将更易于阅读(因为它只是是代码,而不是数据)
  • 您无需担心数字和日期等内容的格式
  • 您不会受到SQL injection attacks 的攻击

【讨论】:

  • 老实说,我不认为 xkcd 链接对还不了解 SQL 注入的新手很有帮助。
【解决方案2】:

您忘记了日期/时间的引号。

【讨论】:

    【解决方案3】:

    尝试改用这一行:

    "AND a.`Postponed` <= NOW()" 
    

    它应该在当前时间与本机 MySql 函数一起使用。

    【讨论】:

      【解决方案4】:

      查看名为parameterized queries。他们会为您处理这些格式问题。

      【讨论】:

        【解决方案5】:

        您不应该构建附加字符串的查询。这不是很安全(sql 注入),而且您没有利用 ADO .NET 功能根据参数类型设置正确的格式。

        您应该使用参数化查询。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-15
          • 1970-01-01
          • 2015-09-03
          • 2019-01-13
          • 2011-04-15
          • 2011-08-25
          • 2023-04-04
          • 2021-04-11
          相关资源
          最近更新 更多