2013-04-09 64 views
1

我正在使用mysql与asp.net将数据保存在数据库中。在使用server.HTMLEncode()后,当我将数据保存在数据库中时,数据在删除\后保存。这就是我如何保存数据c#,Mysql数据比较问题

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

在若名是XXX \ ABC这种情况下,它被保存为XXXABC。在保存在数据库中时删除了斜杠。

当我读到一样,我需要检查,如果登录的用户

接下来的时间,所以我下面

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

} 

但问题是,上述条件始终是假的对我所保存的数据的一个因为我有以下值 existingRowEditor="XXXABC"Server.HtmlEncode(User.Identity.Name) =XXX\\ABC

那么如何检查上述条件是否属实?

+0

为什么编码的HTML的用户名吗? – 2013-04-09 06:00:48

+0

即使我不HTMLEncode的名称,它仍然保存在XXXABC数据库即删除\\从名称 – khurram 2013-04-09 06:11:56

+0

你已经给你如何保存数据的“代码”很奇怪 - 它是C#和SQL的混合物。请显示代码*实际*的样子。如果你不使用参数化SQL,那很可能是问题所在。 – 2013-04-09 06:18:23

回答

1

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

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

最好您应该使用参数化查询,而不是将数据连接到SQL查询中。如果这是不可能的,你必须必须正确地转义文本在SQL代码中的字符串字面值,所以你必须用双斜杠替换每个反斜杠,并且用反斜杠前置每个撇号。如果你没有正确地转义它,你的应用程序将会全面打开SQL注入攻击。

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

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