none
Error: sintaxis incorrecta cerca de '=' RRS feed

  • Pregunta

  • Hola!

    Estoy validando la conexión de un usuario y contraseña de un formulario en C# a SQL 2014, doy en la opción de ingresar en un botón pero me muestra el siguiente error: sintaxis incorrecta cerca de c#, ya he revisado varias cosas, pero no le encuentro error.

    Le agradezco si me pueden ayudar,

    Slds,

    Código:

    Clase Funciones

    class Funciones
        {
            public String CadenaConexion = "Data Source = localhost\\SQL2014EXPRESS; Initial Catalog = Acceso; Integrated Security=true";

            public SqlDataAdapter DA;
            public DataTable DT;
            public DataRow DR;
            public DataSet DS;
            public String Consulta;
            public String CadQuery;    
            public String CadIns;

            public void operarRegistro(String cadena)
            {
                DA = new SqlDataAdapter(cadena, CadenaConexion);
                DT = new DataTable();
                DA.Fill(DT);
            }
        }

    Formulario

     public partial class frmLogin : Form
        {
            Funciones f = new Funciones();
            public frmLogin()
            {
                InitializeComponent();
            }

            private void textBox2_TextChanged(object sender, EventArgs e)
            {

            }

            private void button2_Click(object sender, EventArgs e)
            {
                this.Close();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                try {
                    f.Consulta = "SELECT * FROM validar WHERE Login='" + txtuser.Text + "' AND Password='" + txtpass.Text + "' ";

                    f.operarRegistro(f.CadenaConexion);

                    if (f.DT.Rows.Count > 0)
                    {
                        MessageBox.Show("Usuario Valido");
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Usuario Invalido");
                    }
                } catch (SqlException err)
                {
                    MessageBox.Show(err.Message);
                }
                
            }



    Daniel Valero

    lunes, 3 de octubre de 2016 1:08

Respuestas

  • Hola AlejandroSDeveloper,

    La query no está mala, pero recomendaría usar String.Format(...) para que evites la concatenación usando el + .

    string query = string.Format(@"SELECT * FROM validar WHERE Login='{0}' 
                                     AND Password='{1}'", txtuser.Text, txtpass.Text);

    Tu error se produce porque no estás enviando la consulta, sino envías la cadenaConexion :

    f.operarRegistro(f.CadenaConexion);

    Intenta cambiando por esto :

                try
                {
                    string query = string.Format(@"SELECT * FROM validar WHERE Login='{0}' 
                                     AND Password='{1}'", txtuser.Text, txtpass.Text);
    
                   bool existe = f.operarRegistro(query);
    
                    if (existe)
                    {
                        MessageBox.Show("Usuario Valido");
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Usuario Invalido");
                    }
                }

    Dónde tu método retornaría un valor boolean.

                public bool operarRegistro(string query)
                {
                    DA = new SqlDataAdapter(query, CadenaConexion);
                    DT = new DataTable();
                    DA.Fill(DT);
    
                    return DT.Rows.Count > 0; //Si encuentra retorna true, caso contrario false
                }

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 3 de octubre de 2016 2:04
  • AlejandroSDeveloper,

    El error es claro, envías como argumento la cadena de conexión que se encuentra en la propiedad 'CadenaConexion' al que accedes por su nivel de acceso, deberías enviar la consulta sql. 

    Como sugerencia, no es correcto definir instancias de clase a nivel global, tampoco es necesario hacer uso de un objeto de tipo DataTable para recuperar un único valor y no es recomendable identificar un objeto con un nombre reservado (Login, Password).

    Te recomiendo seguir la siguiente estructura:

    public bool ExisteUsuario(string usuario, string clave)
    {
    	using (SqlConnection cn = new SqlConnection("Cadena de conexión"))
    	{
    		try
    		{
    			//Abrir conexión
    			cn.Open();
    
    			//Texto de la consulta de selección
    			string ConsultaSql = @"SELECT COUNT(*) FROM validar 
    						WHERE [Login]=@usuario And [Password]=@clave";
    
    			//Crear una instancia de la clase SqlCommand
    			SqlCommand cmd = new SqlCommand(ConsultaSql, cn);
    
    			//Agregar parámetros a la colección
    			cmd.Parameters.AddWithValue("@usuario", usuario);
    			cmd.Parameters.AddWithValue("@clave", clave);
    
    			return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
    		}
    		catch (Exception ex)
    		{
    			MessageBox.Show(ex.Message);
    		}
    	}
    }



    El método puedes invocarlo de la siguiente manera:

    private void button1_Click(object sender, EventArgs e)
    {
    	if (ExisteUsuario(txtuser.Text, txtpass.Text))
    	{
    		//Autenticación exitosa
    	}
    	else
    	{
    		MessageBox.Show("El usuario o la contraseña no existe o son incorrectos");
    	}		
    }
    		
    


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 3 de octubre de 2016 7:26

Todas las respuestas

  • Hola AlejandroSDeveloper,

    La query no está mala, pero recomendaría usar String.Format(...) para que evites la concatenación usando el + .

    string query = string.Format(@"SELECT * FROM validar WHERE Login='{0}' 
                                     AND Password='{1}'", txtuser.Text, txtpass.Text);

    Tu error se produce porque no estás enviando la consulta, sino envías la cadenaConexion :

    f.operarRegistro(f.CadenaConexion);

    Intenta cambiando por esto :

                try
                {
                    string query = string.Format(@"SELECT * FROM validar WHERE Login='{0}' 
                                     AND Password='{1}'", txtuser.Text, txtpass.Text);
    
                   bool existe = f.operarRegistro(query);
    
                    if (existe)
                    {
                        MessageBox.Show("Usuario Valido");
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Usuario Invalido");
                    }
                }

    Dónde tu método retornaría un valor boolean.

                public bool operarRegistro(string query)
                {
                    DA = new SqlDataAdapter(query, CadenaConexion);
                    DT = new DataTable();
                    DA.Fill(DT);
    
                    return DT.Rows.Count > 0; //Si encuentra retorna true, caso contrario false
                }

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    lunes, 3 de octubre de 2016 2:04
  • AlejandroSDeveloper,

    El error es claro, envías como argumento la cadena de conexión que se encuentra en la propiedad 'CadenaConexion' al que accedes por su nivel de acceso, deberías enviar la consulta sql. 

    Como sugerencia, no es correcto definir instancias de clase a nivel global, tampoco es necesario hacer uso de un objeto de tipo DataTable para recuperar un único valor y no es recomendable identificar un objeto con un nombre reservado (Login, Password).

    Te recomiendo seguir la siguiente estructura:

    public bool ExisteUsuario(string usuario, string clave)
    {
    	using (SqlConnection cn = new SqlConnection("Cadena de conexión"))
    	{
    		try
    		{
    			//Abrir conexión
    			cn.Open();
    
    			//Texto de la consulta de selección
    			string ConsultaSql = @"SELECT COUNT(*) FROM validar 
    						WHERE [Login]=@usuario And [Password]=@clave";
    
    			//Crear una instancia de la clase SqlCommand
    			SqlCommand cmd = new SqlCommand(ConsultaSql, cn);
    
    			//Agregar parámetros a la colección
    			cmd.Parameters.AddWithValue("@usuario", usuario);
    			cmd.Parameters.AddWithValue("@clave", clave);
    
    			return Convert.ToInt32(cmd.ExecuteScalar()) > 0;
    		}
    		catch (Exception ex)
    		{
    			MessageBox.Show(ex.Message);
    		}
    	}
    }



    El método puedes invocarlo de la siguiente manera:

    private void button1_Click(object sender, EventArgs e)
    {
    	if (ExisteUsuario(txtuser.Text, txtpass.Text))
    	{
    		//Autenticación exitosa
    	}
    	else
    	{
    		MessageBox.Show("El usuario o la contraseña no existe o son incorrectos");
    	}		
    }
    		
    


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 3 de octubre de 2016 7:26