Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止SQL注入-但没有参数_C#_Sql_Parameters_Code Injection - Fatal编程技术网

C# 防止SQL注入-但没有参数

C# 防止SQL注入-但没有参数,c#,sql,parameters,code-injection,C#,Sql,Parameters,Code Injection,我用C#编写了一些代码,用于创建新密码: SqlCommand cmd = new SqlCommand("select pwdencrypt('" + txtNewPass1.Text + "')", Conn); 现在,它从文本框txtNewPass1中获取文本值,并使用pwdencrypt对其进行加密,然后再将另一位代码放入数据库(该位使用参数) 然而,问题是上面的代码并没有——而且实际上似乎不能。出于某种原因,使用参数(而不是txtNewPass1.Text)似乎会返回错误的值(实际上

我用C#编写了一些代码,用于创建新密码:

SqlCommand cmd = new SqlCommand("select pwdencrypt('" + txtNewPass1.Text + "')", Conn);
现在,它从文本框txtNewPass1中获取文本值,并使用pwdencrypt对其进行加密,然后再将另一位代码放入数据库(该位使用参数)

然而,问题是上面的代码并没有——而且实际上似乎不能。出于某种原因,使用参数(而不是txtNewPass1.Text)似乎会返回错误的值(实际上,我现在想知道是否可以通过将txtNewPass1.Text放入字符串,然后通过参数传递来解决这个问题)。至少在本例中,使用参数会给我们一个与值不匹配的密码


还有谁见过这个吗?

D'oh!我真的不想自己回答这个问题,因为我太尴尬了,但是嘿嘿

SqlCommand cmd = new SqlCommand("select pwdencrypt(@MyPass)", Conn
我将单引号保留在中,因此它试图加密(“@MyPass”),而不是(@MyPass)。因此,每次它都将@MyPass作为密码进行加密,而不是将@MyPass表示的内容作为字符串进行加密

别理我,现在太早了。隐马尔可夫模型。。。快到午餐时间了

出于某种原因,使用参数(而不是txtNewPass1.Text)似乎会返回错误的值


您应该使用参数,除非绝对不可能这样做;任何“错误的值”都很可能是
varchar
nvarchar
之间的差异-因此,要小心知道您想要的是什么,以及您正在使用的是什么(
pwdencrypt('foo')
pwdencrypt(N'foo')
)。也;考虑<代码> HasByths<代码>而不是<代码> pWdEngRyp><代码> > < /p>您使用的是哪个数据库和版本?当您尝试将其作为参数时,代码是什么?感谢您的响应,但不要担心,我今天有点傻。注意:SQLBOL建议使用
hashbytes
而不是
pwdencrypt
。无法使用参数的一个例子是使用
CREATE LOGIN
,它要求登录名的对象名不能参数化。