2010-09-03 40 views
0

我查询了问题,得到了这样的事情DateTime.Now到MySQL的日期时间

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服务器版本正确的语法附近'14使用手册:40:在第37' 行1

尝试不同势combinantions但没有任何工程:(

+0

您的代码有几个[SQL注入漏洞](http://www.google.com/search?q=sql+injection+vulnerability)。请找出这个术语的含义并相应地修复您的代码。 – Timwi 2010-09-03 12:46:47

回答

2

你忘了周围的引号日期/时间的事情。

+0

是的,这是我的问题,我忘了'配额 – Cfaniak 2010-09-06 06:44:53

3

简单的答案是没有直接嵌入值到SQL下手。

使用参数化的SQL语句,指定的参数值DateTime.Now,和一切都会好起来:

  • 你的SQL将会更容易阅读(因为它会只是是代码,而不是数据)
  • 您不需要担心之类的东西数字格式和日期
  • 你不会是脆弱的SQL injection attacks
+0

我真的不认为xkcd链接对尚未了解SQL注入的新手非常有帮助。 – Timwi 2010-09-03 12:56:41

0

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

您应该使用参数化查询。

1

尝试使用该行:

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

,它应该与当前时间的本地的MySQL函数工作。