none
Base de datos c# - sqlserver2014 RRS feed

  • Pregunta

  • Saludos.

    Soy nuevo programando.

    Lo que pasa es lo siguiente. Cree una base de datos de nombre USUARIOS con columnas de Id, Nombre y Contraseña. En C# tengo un formulario de inicio de sesion y otro de registro.

    Cuando registro un usuario estos datos ingresan normalmente a mi base de datos, sin embargo cuando intento ingresar me aparece un error:

    Error por: System.Data.SqlClient.SqlException.Incorrect Syntax near '='.

    Si pudieran ayudarme, estaría agradecido.

    Este es el codigo de mi clase usuarioDAL, en el cual tengo mi cominicacion con c#:

     public static int Autentificar(String pUsuarios, String pContraseña)
            {
                int resultado = -1;
                SqlConnection conexion = BDComun.ObtenerConexion();
                SqlCommand comando = new SqlCommand(string.Format(" Select * From Usuarios Where Nombre = '{0}' and PwdCompare('{1}', Contraseña = 1 ",pUsuarios,pContraseña),conexion);
                SqlDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    resultado = 50;
                }
                conexion.Close();
                return resultado;
            }

    viernes, 14 de junio de 2019 1:57

Todas las respuestas

  • Hola Staffing:

    Te falta un paréntesis cerrando la función PwdCompare.

    SqlCommand comando = new SqlCommand(string.Format(" Select * From Usuarios Where Nombre = '{0}' and PwdCompare('{1}', Contraseña) = 1 ",pUsuarios,pContraseña),conexion);
    https://docs.microsoft.com/es-es/sql/t-sql/functions/pwdcompare-transact-sql?view=sql-server-2017

    viernes, 14 de junio de 2019 4:25
  • Aunque con la rectificación que te han dado en la respuesta anterior ya no te saldrá el error, tu programa tiene un error gravísimo: es vulnerable ante ataques de inyección de SQL.

    Concretamente, para saltarse el acceso basta con que un usuario teclee lo siguiente cuando el formulario le pregunte su nombre de usuario:

    ' or 1=1--

    El motivo es que estás concatenando lo que teclea el usuario en tu sentencia SQL, por lo que lo que escribió el usuario pasa a ser parte de la sentencia y eso le permite hacer "de todo" con tu base de datos.

    Aunque seas nuevo programando, estudia rápidamente cómo parametrizar las sentencias SQL porque es importantísimo, de lo contrario "estás vendido" cuando escribes código como este.

    viernes, 14 de junio de 2019 6:02
    Moderador