【问题标题】:How can I replace ” with " in a mysql Query?如何在 mysql 查询中将“替换为”?
【发布时间】:2010-04-02 18:32:45
【问题描述】:

我正在尝试从 ASP.NET 2005 运行此 SQL,但收到无效的 SQL 错误,因为其中包含一个奇怪的字符

在我的代码中,我试图用" 替换,但它没有这样做,因为替换命令中的特殊字符正在更改为"

查询:

insert into userquery(description)
  values ('In fact, Topeka Google Mayor Bill Bunten expressed it best: “Don’t be fooled. Even Google recognizes that all roads lead to Kansas, not just yellow brick ones.”')

如果我在 mysql 中复制并执行它,它工作得很好。

我该如何解决这个问题?

【问题讨论】:

  • 请看标题中的奇怪字符。
  • 你能发布确切的错误信息吗?

标签: asp.net sql mysql


【解决方案1】:

您正在构建错误的查询。您没有在客户端上说 c# 或 vb.net,但无论哪种方式,您的 sql 字符串应该看起来更像这样:

string query = "insert into userquery(description) values (@description)";

然后你像这样设置你的描述值:

using (var cn = new MySqlConnection("... your connection string here..."))
using (var cmd = new MySqlCommand(query, cn))
{
   /* THIS IS THE IMPORTANT PART */
   cmd.Parameters.Add("@description", SqlDbType.VarChar).Value = MyDescriptionVariable;
   /*****************************/

   cn.Open();
   cmd.ExecuteNonQuery();
}

还有vb版:

 Using cn As New MySqlConnection("... your connection string here..."), _
       cmd As New MySqlCommand(query, cn)

   ''# THIS IS THE IMPORTANT PART
   cmd.Parameters.Add("@description", SqlDbType.VarChar).Value = MyDescriptionVariable
   ''############################

   cn.Open()
   cmd.ExecuteNonQuery()
End Using

这将确保您的参数正确转义,无论您有什么奇怪的字符。

【讨论】:

    【解决方案2】:

    您应该像这样编写查询,在文本前使用 N:

    insert into userquery(description) values (N'In fact, Topeka Google Mayor Bill Bunten expressed it best: “Don’t be fooled. Even Google recognizes that all roads lead to Kansas, not just yellow brick ones.”')
    

    并确保该字段是 nvarchar on ntext(后者已被弃用,取而代之的是 nvarchar(max) btw。)。

    无论如何,您应该遵循Joel Coehoorn 的建议,使用参数化查询来避免此类问题和许多其他问题(如 SQL 注入),因为作为参数拉入数据库的字符串在到达数据库之前会被清理和转义。

    【讨论】:

      【解决方案3】:

      实际的错误消息会有所帮助。如果是 unicode 问题,您可以尝试:

      插入一个 N:

      insert into userquery(description)
        values (N'In fact, Topeka Google Mayor Bill Bunten expressed it best: “Don’t be fooled. Even Google recognizes that all roads lead to Kansas, not just yellow brick ones.”')
      

      或见:replace MSWord smart quotes in asp.net webform

      mystring.Replace("\u201C","\"").Replace("\u201D","\"")
      

      【讨论】:

        【解决方案4】:

        双引号的 ASCII 值为 147。

        Good Ol' VB6 即时窗口:

        ?asc("“")
         147
        

        您可以使用转义的双引号对 Chr(147) 进行替换:Chr(34) & Char(34) for ""。

        【讨论】:

        • 没有 ASCII 字符 147 这样的东西。
        • 告诉 VB6。它报告了 147 个。
        猜你喜欢
        • 2020-03-14
        • 1970-01-01
        • 2021-04-03
        • 2015-03-22
        • 2015-04-21
        • 1970-01-01
        • 1970-01-01
        • 2012-11-15
        • 1970-01-01
        相关资源
        最近更新 更多