C#-程序添加一个额外的';其中a';已找到

本文关键字:其中 添加 程序 一个 C#- | 更新日期: 2023-09-27 18:08:46

我正在做一件事,它会为字符串中的每个字符添加一个引号。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
        string insertStatement = "INSERT INTO EXCEPTION_LOG (value1, value2" +
                                    "VALUES ('test', 'test2');";
        AddEscapeStrings(insertStatement);
        Console.Read();
    }
    private static void AddEscapeStrings(string insertStatement)
    {
        int i = 0;
        char[] c = insertStatement.ToCharArray();
        while (i < c.Length)
        {
            if (c.ElementAt(i) == '''')
            {
                Console.Write(i + ", ");
                c[i - 1] = '''';
            }
            i++;
            Console.WriteLine("'r'n ");
            for (int j = 0; j < c.Length; j++ )
            {
                Console.Write(c.GetValue(j));
            }
        }            
    }
  } 
}

这段代码正在查找",现在我想在它之前添加一个额外的"的所有位置。但是我不确定哪种方法是最好的,c#有一个方法可以在所需的位置添加一个",而不替换该位置的当前字符吗?还是每次都要移动数组?

期望的结果是(注意双单引号(:

插入异常日志(值1,值2+"VALUES('test','test2''(;";

C#-程序添加一个额外的';其中a';已找到

也许我遗漏了一些东西,但为什么不简单地使用Replace方法呢?

insertStatement = insertStatement.Replace("'","''"); 

您希望您的代码做什么?你期待这个吗:

VALUES ('test', 'test2')

变成这样?

VALUES (''test'', ''test2'')

这肯定是无效的SQL;你肯定不想那样。

实际上,您需要先转义字符串,然后构造SQL查询:

var escapedString1 = escape("test");
var escapedString2 = escape("test2");
string insertStatement = string.Format(
    "INSERT INTO EXCEPTION_LOG (value1, value2) VALUES ({0}, {1});",
    escapedString1, escapedString2);

现在编写转义函数真的很容易:

public static string escape(string input)
{
    return "'" + input.Replace("'", "''") + "'";
}

这段代码需要很长的路才能完成,你只需要对所有的"字符运行一个替换,然后用"替换即可。以下代码:

private static string AddEscapeStrings(string insertStatement)
{
    var returnString = returnString.Replace("'","''");
    return returnString;
}

您正在用c[i-1]=''''覆盖前一个字符;

你应该插入它。

首先,尝试使用'@'synax来换行:

string insertStatement = @"INSERT INTO EXCEPTION_LOG (value1, value2) 
                                    VALUES ('test', 'test2');";

其次,为什么需要使用双'使请求无效?

最后,您可以使用replace:

insertStatement = insertStatement.Replace("'","''"); 

如果语句中已经没有CCD_ 2。

您应该使用:

    private static string AddEscapeStrings(string insertStatement)
    {
        return insertStatement.Replace("'", "''");
    }

您可以直接插入字符串中。。。

string result = "";
foreach(char c in insertStatement)
{
   if(c == '''')
      result += "'";
   result += c;
}
return result;

编辑:我错过了执行SQL查询的地方——应该使用参数。以下是您应该阅读的链接:http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx