【问题标题】:Syntax error on mysql in c#c#中mysql的语法错误
【发布时间】:2017-12-25 20:17:47
【问题描述】:

这是我从 c# 生成的查询

Select * from contac 
where ((LCASE(first_name) = '' and LCASE(sur_name) = 'bn d. o’connor & co' ) 
or 
(LCASE(first_name) = 'bn d. o’connor & co' and LCASE(sur_name) = '' )) 
and 
Medicom_GP_KEY is null

但是如果我执行并填充数据表意味着它会显示类似的错误

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 'connor & co' 附近使用正确的语法)或 (LCASE(first_name) = 'bn d. o'connor & co' 和 LCASE(sur_' 在第 1 行

不知道哪里出错了。

【问题讨论】:

  • 使用准备好的语句。它可以防止 SQL 注入并转义特殊字符
  • 错误信息告诉你错误发生的确切位置。
  • 这不是单引号吗?你需要逃避它
  • 在 CP1252 中,撇号 与单引号 ' 具有相同的代码。可能这是语法错误的原因,应该转义或使用带有准备语句的参数化查询。
  • 是的,但我实际上使用dr["GP FirstName"].ToString().ToLower().Replace("'", @"\'") 来逃避

标签: c# mysql sql windows-applications


【解决方案1】:

您在数据阅读器上转义撇号,而不是在初始 SQL 命令上。您的命令应如下所示:

Select * from contac 
where ((LCASE(first_name) = '' and LCASE(sur_name) = 'bn d. o''connor & co' ) 
or 
(LCASE(first_name) = 'bn d. o''connor & co' and LCASE(sur_name) = '' )) 
and 
Medicom_GP_KEY is null

双引号将它们转义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 2010-12-04
    • 2011-07-21
    相关资源
    最近更新 更多