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''(;";
也许我遗漏了一些东西,但为什么不简单地使用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