Estoy empezando a trabajar con ASP.NET C# y mi base de datos es SQL Server. Estoy tratando de escribir una consulta en la que quiero usar una declaración preparada.Declaración preparada en ASP.Net C# cuando se usa SQL Server
Esta es una consulta que permite registro de usuario para:
SqlParameter UserName = new SqlParameter("@user", SqlDbType.NVarChar, 30);
SqlParameter Password = new SqlParameter("@pass", SqlDbType.NVarChar, 20);
UserName.Value = user.ToLower();
Password.Value = pass;
SqlCommand command = new SqlCommand(null, conn);
command.Parameters.Add(UserName);
command.Parameters.Add(Password);
command.CommandText = "SELECT * FROM table_users WHERE user_name = '@user' AND password = '@pass';";
command.Prepare();
SqlDataReader reader = command.ExecuteReader();
bool tmp = reader.HasRows;
tmp
valor de la variable siempre FALSE
, incluso cuando entro existir usuario con la contraseña correcta.
Si acabo de quitar parámetros y escribir la consulta de esta manera:
command.CommandText = "SELECT * FROM table_users WHERE user_name = '"+user+"' AND password = '"+ pass+"';";
tmp
valor de obtener la variable de TRUE
existe usuarios.
He intentado utilizar esta sintaxis para las consultas INSERT INTO
y funciona correctamente.
Ya leí todas las sugerencias sobre cómo cambiar @
a ?
y no funciona. que ha habido un error:
Incorrect syntax near '?'. Statement(s) could not be prepared.
Ayúdame por favor, Gracias!
Muchas gracias mucho, ahora es su trabajo. Verificaré los "hashes salados". –
@MarkGravell - "Por cierto, llamar a Prepare() aquí no está ayudando aquí". ¿Podrían dar más detalles sobre "por qué" usar una declaración preparada no ayuda en este uso? –
@Jesse porque la mayoría de las bases de datos en estos días no se preocupan: tienen un caché de plan de consultas automático en consultas ad-hoc que hace cualquier diferencia básicamente indestructible –