C#-添加额外';其中a';找到

C#-添加额外';其中a';找到,c#,asp.net,C#,Asp.net,我正在做的是在字符串中添加一个单引号“for every” using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string insertStatement = "INSER

我正在做的是在字符串中添加一个单引号“for every”

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));
            }
        }            
    }
  } 
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
string insertStatement=“插入异常日志(值1,值2)”+
“值('test','test2');”;
AddEscapeStrings(insertStatement);
Console.Read();
}
私有静态void addscapestrings(stringinsertstatement)
{
int i=0;
char[]c=insertStatement.ToCharArray();
而(i
这段代码正在查找',现在我想在它之前添加一个额外的'。但是我不确定哪种方法是最好的,c#是否有一种方法可以在所需位置添加一个',而不替换该位置的当前字符,还是每次都必须移动数组

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

插入异常日志(值1,值2)+
“值”(“test”、“test2”);;;

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

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

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

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

这段代码需要很长时间才能完成,您只需对所有“字符”运行替换并替换为“”。代码如下:

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

这段代码需要很长时间才能完成,您只需对所有“字符”运行替换并替换为“”。代码如下:

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

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


您应该插入它。

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


您应该插入它。

您可以直接插入字符串

string result = "";

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

return result;

编辑:我错过了执行SQL查询的部分-您应该使用参数。这里有一个链接,您应该阅读:

您可以直接插入字符串中

string result = "";

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

return result;

编辑:我错过了执行SQL查询的部分-您应该使用参数。这里有一个链接,您应该阅读:

首先,尝试使用'@'synax中断行:

string insertStatement = @"INSERT INTO EXCEPTION_LOG (value1, value2) 
                                    VALUES ('test', 'test2');";
其次,为什么需要使用双
”使请求无效

最后,您可以使用替换:

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

如果语句中没有“
”。

首先,尝试使用“@”synax中断行:

string insertStatement = @"INSERT INTO EXCEPTION_LOG (value1, value2) 
                                    VALUES ('test', 'test2');";
其次,为什么需要使用双
”使请求无效

最后,您可以使用替换:

insertStatement = insertStatement.Replace("'","''"); 
如果语句中没有

您应该使用:

    private static string AddEscapeStrings(string insertStatement)
    {
        return insertStatement.Replace("'", "''");
    }
你应使用:

    private static string AddEscapeStrings(string insertStatement)
    {
        return 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("'", "''") + "'";
}

您希望您的代码做什么?您希望:

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("'", "''") + "'";
}

你想做这件事而不是首先使用参数化SQL吗?不要混合代码(SQL)和数据。你来自C++?右边有一个<代码>字符串。替换完成这个的代码/ <代码>;<代码>插入语句。-此外,通过字符串连接生成SQL语句只是一个巨大的SQL注入攻击,而不是一个问题。您好……这不是直接针对您的问题,但请不要尝试使用字符串连接和用户输入构建SQL语句……永远不要这样做(搜索SQL注入)。可以使用LinqToSql或EF od甚至数据集,也可以使用参数化的sqlcommand—这更简单,更不容易出错,而且安全性也没有那么高-issue@JonSkeet-嗨,John,我想通过代码而不是直接从SQL来完成这项工作,因为我在类中创建了一个通用方法来审核每个SQL语句,我不能手动完成这项工作e string.Replace看起来很糟糕,让我试试。@Ryan:我的观点是,SQL语句不应该直接包含值。理想情况下,您的审核员应该拒绝任何看起来确实包含值的内容……您为什么要这样做而不是首先使用参数化SQL?不要混合使用代码(SQL)和数据。你来自C++吗?有一个<代码>字符串。替换完成这个的代码< >代码>代码>插入语句。-此外,通过字符串连接生成SQL语句只是一个巨大的SQL注入攻击,而不是一个问题。您好……这不是直接针对您的问题,但请不要尝试使用字符串连接和用户输入构建SQL语句……永远不要这样做(搜索SQL注入)。可以使用LinqToSql或EF od甚至数据集,也可以使用参数化的sqlcommand—这更简单,更不容易出错,而且安全性也没有那么高-issue@JonSkeet-嗨,John,我想通过代码而不是直接从SQL来完成这项工作,因为我在类中创建了一个通用方法来审核每个SQL语句,我不能手动完成这项工作e string.Replace看起来很糟糕,让我试试。@Ryan:我的观点是,您的SQL语句首先不应该直接包含值。理想情况下,您的审计员应该拒绝任何