【问题标题】:single quotes escape during string insertion into a database在将字符串插入数据库期间单引号转义
【发布时间】:2012-08-11 06:10:13
【问题描述】:

使用“'”时插入失败。 示例字符串是:He's is a boy。 我尝试使用转义符号跳过“'”,但我认为这不是正确的方法。

textBox3.Text.Replace("'", " \'");
string sql= "insert into gtable (1text,1memo) values ('"+textBox3.Text+"',null)";
        OleDbCommand cmd = new OleDbCommand(sql, con);

        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

我确实可以选择用“`”替换“'”,但这也会改变数据库中的文本。我希望将“'”保留为相同,并将其插入到数据库中。

【问题讨论】:

    标签: c# database insert special-characters


    【解决方案1】:

    试试这个

        string sql= "insert into gtable (1text,1memo) values (@col1,NULL)";
        OleDbCommand cmd = new OleDbCommand(sql, con);
        cmd.Parameters.AddWithValue("@col1",textBox3.Text);
        con.Open();
    

    【讨论】:

    • +1 通过将SQL语句的结构与数据分离,这样就消除了sql注入的危险(也无需转义)。
    • 这个问题是它需要连接,你不能得到“编译”版本?例如,我打开了一个单独的工作单元,只想手动执行一些带有参数的 SQL,我不想打开新连接
    【解决方案2】:

    试试

    string sql= "insert into gtable (1text, 1memo) " + 
                "values ('" + textBox3.Text.Replace("'", "''") + "', null)";
    

    【讨论】:

    • 这个工作的人!!谢谢。那么你如何使用“''”来转义单引号。你在哪里读到这个。我想了解这些查询不接受的特殊字符。
    • 技术上正确的答案,但这是自找麻烦。正如@codingbiz 所建议的那样使用参数。
    • 谢谢你救了我的命
    【解决方案3】:

    要在数据库中插入单引号,请将 ' 替换为 ''。在数据库中只有单引号会去。

    使用这个

    string sql= "insert into gtable (1text,1memo) values ('" 
                + textBox3.Text.Replace("'", "''") + "', null)";
    

    其余代码相同。

    【讨论】:

    • 这看起来与 juergen d 的答案(接受的答案)相同,但要早一分钟!为什么不考虑这个?
    • @MatinKh:今天不是我的日子。
    【解决方案4】:

    String.Replace 的 MSDN 文章中说:

    返回一个新字符串,其中当前字符串中出现的所有指定 Unicode 字符或字符串都将替换为另一个指定的 Unicode 字符或字符串。

    在第一行,您没有将 textBox3.Text 的值分配给该方法调用的结果,这意味着绝对不会发生任何事情。

    此外,要在 SQL Server 中转义引号,您只需使用两个单引号(注意:与双引号不同)。

    这应该会给你预期的结果:

    textBox3.Text = textBox3.Text.Replace("'", "''");
    

    此外,您可能希望查看String.Format 以满足您的字符串连接需求。

    String escapedInput = textBox3.Text.Replace("'", "''");
    String sql = String.Format("insert into gtable (1text,1memo) values ('{0}',null)", escapedInput);
    

    【讨论】:

      【解决方案5】:

      最好的办法是:

      string Name = Server.HtmlEncode(txtName.Text);
      

      【讨论】:

      • HTML与SQL有什么关系?
      猜你喜欢
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多