我想选择用户,但我无法得到它。 这是我的查询
SqlCommand myCommand = new SqlCommand("Select * from Users where Email=" + UserEmailPass.Email + "And Password=" + UserEmailPass.Password, conn);
SqlDataReader Detailsreader = myCommand.ExecuteReader();
我的查询是否正确>?请帮忙
答案 0 :(得分:3)
如果Email
和Password
是字符串字段,那么您需要在单引号中封装用于比较的值,但正确的方法是使用参数化查询
SqlCommand myCommand = new SqlCommand("Select * from Users " +
"where Email=@mail And Password=@pwd" conn);
myCommand.Parameters.AddWithValue("@mail",UserEmailPass.Email);
myCommand.Parameters.AddWithValue("@pwd",UserEmailPass.Password);
SqlDataReader Detailsreader = myCommand.ExecuteReader();
如果您使用参数化查询,则可以避免SQL Injection问题,并且您不必担心用引号封装字符串值,如果您的值包含引号,则将它们加倍,更不用说适当的小数数字的分隔符和日期的正确格式。
参数化查询经常被忽视的好处是您的查询现在清晰且完全可以理解的文本。正如下面的Mr Tim Schmelter所指出的,您的查询的语法错误缺少AND与WHERE子句中的前一个值之间的空格。如果编写参数化查询,这种错误就更难了。
答案 1 :(得分:0)
SqlCommand myCommand = new SqlCommand("Select * from Users where Email=@mail and Password@pass" , conn);
System.Data.SqlClient.SqlParameter par = new System.Data.SqlClient.SqlParameter("@mail", UserEmailPass.Email );
System.Data.SqlClient.SqlParameter par1 = new System.Data.SqlClient.SqlParameter("@pass", UserEmailPass.Password);
myCommand.Parameters.Add(par);
myCommand.Parameters.Add(par1);
SqlDataReader Detailsreader = myCommand.ExecuteReader();
请勿使用字符串连接!!!!