c#,Mysql数据比较问题

时间:2013-04-09 05:59:18

标签: c# asp.net mysql

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

INSERT INTO Users(ID,Name) Values(1,Server.HTMLEncode(User.Identity.Name)) 

在这种情况下,如果name为XXX \ ABC,则保存为XXXABC。保存在DB中时删除斜杠。

下次当我阅读相同内容时,我需要检查登录用户是否是我保存数据的用户,所以我按照

进行操作
if ( existingRowEditor == Server.HtmlEncode(User.Identity.Name))
{

}

但问题是上述条件总是假的,因为我有以下值 existingRowEditor="XXXABC"Server.HtmlEncode(User.Identity.Name) =XXX\\ABC

那么如何判断上述情况是否属实?

2 个答案:

答案 0 :(得分:1)

HTML编码不适合编码数据库中存储的数据。

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

优选地,您应该使用参数化查询,而不是将数据连接到SQL查询中。如果那是不可能的,那么必须正确地将文本转义为SQL代码中的字符串文字,因此必须用双反斜杠替换每个反斜杠,并在每个撇号前加一个反斜杠。如果你无法正确地逃避它,那么你的应用程序将会大张旗鼓地进行SQL注入攻击。

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

答案 1 :(得分:0)

您可以使用以下内容:

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();