c#,Mysql数据比较问题

c#,Mysql数据比较问题,c#,asp.net,mysql,C#,Asp.net,Mysql,我正在使用mysql和asp.net将数据保存在数据库中。在使用server.HTMLEncode()后将数据保存到DB中时,数据是在删除\后保存的。这就是我保存数据的方式 INSERT INTO Users(ID,Name) Values(1,Server.HTMLEncode(User.Identity.Name)) 在本例中,如果名称为XXX\ABC,则将其另存为XXXABC。斜杠在以DB保存时被删除 下次当我阅读相同的内容时,我需要检查登录的用户是否是我保存数据的用户,以便我执行以下

我正在使用mysql和asp.net将数据保存在数据库中。在使用server.HTMLEncode()后将数据保存到DB中时,数据是在删除\后保存的。这就是我保存数据的方式

INSERT INTO Users(ID,Name) Values(1,Server.HTMLEncode(User.Identity.Name)) 
在本例中,如果名称为XXX\ABC,则将其另存为XXXABC。斜杠在以DB保存时被删除

下次当我阅读相同的内容时,我需要检查登录的用户是否是我保存数据的用户,以便我执行以下操作

if ( existingRowEditor == Server.HtmlEncode(User.Identity.Name))
{

}
但问题是上面的条件总是错误的,因为我有以下值
existingRowEditor=“XXXABC”
Server.HtmlEncode(User.Identity.Name)=XXX\\ABC


那么,我如何检查上述条件是否正确呢?

HTML编码不适合对数据库中存储的数据进行编码

反斜杠消失的原因是您正在将SQL代码粘贴在一起,并对文本进行编码以在网页中显示,而不是将其转义为SQL查询中的文本。反斜杠在MySQL中用作转义字符,因此字符串中的任何斜杠都将转义下一个字符

最好使用参数化查询,而不是将数据连接到SQL查询中。如果不可能,则必须正确转义文本,使其在SQL代码中成为字符串文字,因此必须将每个反斜杠替换为双反斜杠,并在每个撇号前面加上反斜杠。如果您未能正确地转义它,您的应用程序将对SQL注入攻击敞开大门


HTML编码值应在网页中显示时完成,而不是在将其放入数据库之前完成。

HTML编码不适合对数据库中存储的数据进行编码

反斜杠消失的原因是您正在将SQL代码粘贴在一起,并对文本进行编码以在网页中显示,而不是将其转义为SQL查询中的文本。反斜杠在MySQL中用作转义字符,因此字符串中的任何斜杠都将转义下一个字符

最好使用参数化查询,而不是将数据连接到SQL查询中。如果不可能,则必须正确转义文本,使其在SQL代码中成为字符串文字,因此必须将每个反斜杠替换为双反斜杠,并在每个撇号前面加上反斜杠。如果您未能正确地转义它,您的应用程序将对SQL注入攻击敞开大门


HTML编码值应在网页中显示时完成,而不是在将其放入数据库之前完成。

您可以使用以下方法:

var sqlQueryString = "INSERT INTO Users(ID,Name) Values(@Id,@Name)";
var sqlCommand = new SqlCommand(sqlQueryString, sqlConnection);
sqlCommand.Parameters.Add(new SqlParameter("Id", 1);
sqlCommand.Parameters.Add(new SqlParameter("Name", User.Identity.Name);
sqlCommand.ExecuteNonQuery();

您可以使用以下选项:

var sqlQueryString = "INSERT INTO Users(ID,Name) Values(@Id,@Name)";
var sqlCommand = new SqlCommand(sqlQueryString, sqlConnection);
sqlCommand.Parameters.Add(new SqlParameter("Id", 1);
sqlCommand.Parameters.Add(new SqlParameter("Name", User.Identity.Name);
sqlCommand.ExecuteNonQuery();

为什么要对用户名进行HTML编码?即使我没有对用户名进行HTMLEncode,它仍然会在DB中保存XXXABC,即从名称中删除\\您为如何保存数据给出的“代码”非常奇怪-它是C#和SQL的混合体。请显示代码的实际外观。如果您没有使用参数化SQL,那么这很容易成为问题。为什么要对用户名进行HTML编码?即使我没有对用户名进行HTML编码,它仍然会将XXXABC保存在DB中,即从名称中删除\\您为如何保存数据给出的“代码”非常奇怪-它是C#和SQL的混合体。请显示代码的实际外观。如果您没有使用参数化SQL,那么这很容易成为问题。