C#-添加额外';其中a';找到
我正在做的是在字符串中添加一个单引号“for every”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
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语句首先不应该直接包含值。理想情况下,您的审计员应该拒绝任何