C# 在ASP.net中将变量添加到字符串

C# 在ASP.net中将变量添加到字符串,c#,asp.net,C#,Asp.net,好的,在VB中很容易,但在C中我无法理解: SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM tblUsers WHERE username = '" & username & "'", cn); 这个扔 CS0019: Operator '&' cannot be applied to operands of type 'string' and 'string' 谷歌搜索了一下,找不到答案,请帮这个新手 使

好的,在VB中很容易,但在C中我无法理解:

SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM tblUsers WHERE username = '" & username & "'", cn);
这个扔

 CS0019: Operator '&' cannot be applied to operands of type 'string' and 'string'

谷歌搜索了一下,找不到答案,请帮这个新手

使用“+”而不是“&”

使用+来连接字符串用作一元运算符或二元运算符

但是,正确的答案是使用参数化查询

您正在使用的方法会受到攻击。

+是C中的字符串连接运算符。

使用+而不是&


SqlCommand cmd=new-SqlCommandSELECT COUNT*FROM-tblUsers,其中username='+username+',cn

使用+代替

i、 e


对于此类内容,我更喜欢的另一个选项是String.Format:

SqlCommand cmd = new SqlCommand(String.Format("SELECT COUNT(*) FROM tblUsers WHERE username = '{0}'",username ), cn);

您已经有了六条建议,可以使用+而不是&。但是,从长远来看,最好使用参数化查询,而不是将变量直接连接到SQL语句中。通过连接,特别是如果这是用户输入,您就完全可以接受SQL注入攻击。通过使用参数,可以阻止SQL注入

SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM tblUsers WHERE username = @user");
cmd.Parameters.AddWithValue("@user",  username);

使用+运算符而不是&operator。在用户名='+username+或1=1',cn;Paco,这有什么作用?所有用户都将从数据库中删除。@Tom,不幸的是,编写一个像黑客积累的知识一样聪明的消毒过滤器是不可能的。参数是防止SQL注入的唯一安全方法。非常好的一点,+1。我并没有真正研究过整体问题,是的,您通常应该使用sql参数来解决这类问题。应该说,在查询中运行输入之前,我总是对输入进行清理,我知道sql注入的陷阱,但这似乎是另一种很好的防御措施。
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM tblUsers WHERE username = @user");
cmd.Parameters.AddWithValue("@user",  username);