2014-03-29 49 views
0

我创建了一个网站,并且在我的登录系统中出现语法错误不断发生。临时查询字符串导致语法错误

    conn.Open(); 
       int amountOfUsers = (int)command.ExecuteScalar(); 

       if (amountOfUsers == 1) 
       { 
       //User exists, check if the password match 
       query = string.Format("SELECT password FROM users WHERE name = '{0}", login); 
       command.CommandText = query; 
       string dbPassword = command.ExecuteScalar().ToString(); 
+0

可能重复的[网站登录错误](http://stackoverflow.com/questions/22734342/website-login-error) – halfer

+0

(我可以得到一些asp.net读者VtC,这是一个转发问题afaict - 谢谢)。 – halfer

+1

请不要使用裸体字符串来执行SQL语句。使用参数化查询,它们一样容易编写,但速度更快,更安全并且完全避免了转换问题。如果用户输入了'drop table users;'作为登录名,或者只是'OR 1 = 1; - ',则显示图像。 –

回答

2

您没有在格式字符串与单引号封闭的字符串标识{0}

query = string.Format("SELECT password FROM users WHERE name = '{0}'", login); 

但我强烈建议你不要使用格式字符串与SQL,因为它是对SQL注入一个很好的安全漏洞!

+0

不仅存在安全风险。字符串转换会导致数字和日期参数的很多问题,性能会更差,因为执行计划不会被重用等。 –