【问题标题】:mysql .net connector Apostrophe issuemysql .net 连接器撇号问题
【发布时间】:2017-10-04 08:43:38
【问题描述】:

我在使用 MySQL 时遇到问题,代码如下:

Imports MySql.Data.MySqlClient  'Last version 6.9.9.0 ADO.Net driver for MySQL
    Dim commandSQL As MySqlCommand
    connMySQL.Open()
    commandSQL = connMySQL.CreateCommand
    commandSQL.Connection = connMySQL

   commandSQL.CommandText = "UPDATE t_tesordacq SET COD_FOR=@COD_FOR WHERE 
               YEAR_DOC = 2017 And NUM_DOC = 123" With                     
              commandSQL.Parameters.AddWithValue("@COD_FOR",txtCodFor.Text)
   End With
   commandSQL.ExecuteNonQuery()
   commandSQL.Parameters.Clear()

当我在 txtCodFor 字段中插入包含 撇号(例如:I'm)的文本时,代码出错(*Error: You have an您的 SQL 语法错误;查看与您的 MySQL 服务器版本相对应的手册,以了解在 '\'test' WHERE YEAR_DOC = 2017 And NUM_DOC = 123,* ). 附近使用的正确语法

我也尝试用双撇号替换文本:txtCodFor.Text.Replace("'", "''") 但无事可做。 另外,如果我插入一个反斜杠,它就是重复的!

我已经看到,如果我从 my.ini 的 sql_mode 中删除“NO_BACKSLASH_ESCAPES”选项,一切正常。 不幸的是,为了与 VB6(ODBC 连接)中的书面应用程序兼容,我无法永久删除此选项

感谢您的帮助

【问题讨论】:

  • 你为什么用 C# 标记这个?
  • 因为我也接受c#中的代码示例

标签: mysql .net vb.net


【解决方案1】:

默认情况下,MySqlParameter 对象将使用序列\' 转义'。这与导致语法错误的NO_BACKSLASH_ESCAPES 服务器选项不兼容。据我所知,没有选项可以覆盖此行为(在客户端)。

您将不得不避免使用参数化查询,而是按照the documentation 中的规则构造一个字符串文字;具体来说,用单引号将字符串括起来,并通过加倍来转义每个嵌入的单引号。

commandSQL = connMySQL.CreateCommand
commandSQL.Connection = connMySQL
commandSQL.CommandText = "UPDATE t_tesordacq SET COD_FOR='" &
    COD_FOR.Replace("'", "''") &
    "' WHERE YEAR_DOC = 2017 And NUM_DOC = 123"
commandSQL.ExecuteNonQuery()

【讨论】:

    【解决方案2】:

    我认为以下应该可行 -

    var codeFor = txtCodFor.Text.Replace(@"'", @"\'");
    commandSQL.Parameters.AddWithValue("@COD_FOR", codeFor);
    

    在传递值之前对值中的 ' 进行转义。

    【讨论】:

    • @MarcoZecchi - 你能试试修改后的代码吗?
    • 我尝试输入代码:abc'j 结果是:你的SQL语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'j' 附近使用的正确语法,WHERE YEAR_DOC = 2017 和 NUM_DOC = 123 我尝试使用此替换 Replace("'", "''") ,我发现错误....在'\'j'附近使用的语法,...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2014-11-15
    相关资源
    最近更新 更多