【问题标题】:Query syntax error on MySqlCommandMySqlCommand 上的查询语法错误
【发布时间】:2016-01-13 15:15:46
【问题描述】:

我正在使用 MySqlCommand 在我的 vb.net 应用程序中执行查询插入,现在我有了这个查询:

UPDATE primo_appointments SET 
  book_datetime = @parameter1, 
  start_datetime = @parameter2, 
  end_datetime = @parameter3, 
  notes = @parameter4, 
  hash = @parameter5, 
  is_unavailable = @parameter6 
WHERE hash = xqA5jdsFBLPTrvy5kKHfgXBZdv9Hs2Ld 
  AND lastUpdated = 12-01-2016 15:53:47.3978486

当我这样做时:.ExecuteNonQuery() 出现此错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“15:53:47.3978486”附近使用正确的语法。

怎么了?

【问题讨论】:

    标签: mysql sql .net vb.net syntax-error


    【解决方案1】:

    您的lastUpdatedhash 没有用单引号括起来,这是导致错误的原因。

    对此的解决方法是将其括在引号中,而是为这些值以及其他值使用参数:

    UPDATE primo_appointments SET 
      book_datetime = @parameter1, 
      start_datetime = @parameter2, 
      end_datetime = @parameter3, 
      notes = @parameter4, 
      hash = @parameter5, 
      is_unavailable = @parameter6 
    WHERE hash = @oldHashString
      AND lastUpdated = @lastUpdatedDate
    

    当您使用参数化列表时,您不必记住字段是否需要用引号括起来 - 这是为您处理的。它还可以保护您免受 SQL 注入攻击。

    【讨论】:

    • 奇怪的是,有多少人认为参数不适用于 WHERE 子句
    • 如果作为@param 插入相同的参数可以工作,但是如果我执行查询而不将 Where 参数放入参数化器值将不起作用。
    【解决方案2】:

    你的 varchar 应该在 2 ' 之间,你的查询应该是:

    UPDATE primo_appointments SET book_datetime = @parameter1, 
    start_datetime = @parameter2, end_datetime = @parameter3, 
    notes = @parameter4, hash = @parameter5, is_unavailable = @parameter6 
    WHERE hash = 'xqA5jdsFBLPTrvy5kKHfgXBZdv9Hs2Ld' 
    AND lastUpdated = '12-01-2016 15:53:47.3978486'
    

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多