繁体   English   中英

mysql .net连接器Apostrophe问题

[英]mysql .net connector Apostrophe issue

我在使用以下代码的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),代码出错(*错误:您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册以获取相关信息)在'\\'test' WHERE YEAR_DOC = 2017 And NUM_DOC = 123,* ).附近使用正确的语法'\\'test' WHERE YEAR_DOC = 2017 And NUM_DOC = 123,* ).

我还尝试将文本替换为双撇号: txtCodFor.Text.Replace(“'”,“''”),但没有任何关系。 另外,如果插入反斜杠,它就会重复!

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

谢谢你的帮助

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

您将必须避免使用参数化查询,而应遵循文档中的规则构造字符串文字; 具体来说,用单引号将字符串引起来,并通过将其加倍来对每个嵌入的单引号进行转义。

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()

我认为以下应该起作用-

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

在传递值之前转义'。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM