none
System.Data.OleDb.OleDbException: 'Error de sintaxis (falta operador) en la expresion de consulta 'Id_Empleado='.' RRS feed

  • Pregunta

  • Buenas, soy un principiante en la programacion, y me esta resultando un problema que fraancamente no entiendo.

    Como resumen estoy intentando validar un usuario especificamente con con un DataSet, se que hay otraas maneras de hacerlo, pero tengo mis razones para hacerlo asi. Resulta que cuando hago toda la validacion (que incluso funciona, el error aparece cuando el formulario se supone que tiene que abrir) me lanza la siguiente excepcion System.Data.OleDb.OleDbException: 'Error de sintaxis (falta operador) en la expresión de consulta 'Id_Empleado='.'. Lo mas raro es que ni siquiera tengo ninguna consulta en mi codigo que incluya el Id_Empleado, ademas, ese registro esta lleno.

    La base de datos esta hecha en Acces como se pudieron dar cuenta. Aqui les dejo el codigo

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.OleDb; using GMDealer; namespace GMDealer { public partial class Formu_Login : Form { public Formu_Login() { InitializeComponent(); }

    private void btn_Ingresar_Click(object sender, EventArgs e) { // Consulta string query = "select Nombre_Usuario, Clave from TB_Empleado where Nombre_Usuario='" + tbx_Usuario.Text + "' and Clave='" + tbx_Clave.Text + "';"; //Validar login con dataset DataSet ds = Consultas.ObtenerRegistros(query); string account = ds.Tables[0].Rows[0]["Nombre_Usuario"].ToString().Trim(); string pass = ds.Tables[0].Rows[0]["Clave"].ToString().Trim(); bool existe_registro = (account == tbx_Usuario.Text) && (pass == tbx_Clave.Text); if (existe_registro) { Formu_Menu men = new Formu_Menu(); Formu_Login log = new Formu_Login(); log.Hide(); men.Show(); //Justamente aqui me lanza el error } else { MessageBox.Show("Acceso Denegado"); } } } }


    Y este el de la clase Consultas

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    using System.Data.OleDb;
    using System.Windows.Forms;
    
    namespace GMDealer
    {
        public class Consultas
        {
    
            public static DataSet ObtenerRegistros(string consulta)
            {
                OleDbConnection conx = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" +
                    "Data Source=C:\\Users\\Alejandro\\Desktop\\Visual Studio\\C#\\GMDealer\\GMDealer\\BD_DealerSolution.accdb");
    
                conx.Open();
    
                DataSet ds = new DataSet();
                OleDbDataAdapter dapter = new OleDbDataAdapter(consulta, conx);
    
                dapter.Fill(ds);//Aqui es donde me aparece la excepcion
    
                conx.Close();
    
                return ds;
            }
    
            
    
        }
    }

    Trabajo con la base de datos TB_Empleado, cuenta con:

    Id_Empleado … 2

    Nombre_Empleado … Yasmil

    Apellido … Montero

    Nombre_Usuario … yass

    Clave … 1203

    Y el Id_Empleado es Autonumerico

    Para terminar, Gracias por tomarse su tiempo en responder. Saludos

    sábado, 24 de noviembre de 2018 12:29

Respuestas

  • hola

    >>'OleDbParameterCollection' no contiene una definicion para 'AddWithValue'

    ok puede ser que algunos proviers no tengas este metodo, pero se cambia facilmente

    cmd.Parameters.Add("@usuario", usuario);
    cmd.Parameters.Add("@clave", clave);

    y sino

    cmd.Parameters.Add("@usuario", OleDbType.VarChar).Value = usuario;
    cmd.Parameters.Add("@clave", OleDbType.VarChar).Value = clave;

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 24 de noviembre de 2018 18:23

Todas las respuestas

  • hola

    no se programa de esa forma, tienes que usar parametros

    public static DataTable ObtenerRegistros(string usuario, string clave)
    {
    	string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;
    						Data Source=C:\\Users\\Alejandro\\Desktop\\Visual Studio\\C#\\GMDealer\\GMDealer\\BD_DealerSolution.accdb";
    	OleDbConnection conx = new OleDbConnection(connstring);
    
    	string query = @"select Nombre_Usuario, Clave from TB_Empleado where Nombre_Usuario= @usuario
    					and Clave= @clave";
    			
    	DataTable dt = new DataTable();
    	OleDbCommand cmd = new OleDbCommand(consulta, conx);
    	cmd.Parameters.AddwithValue("@usuario", usuario);
    	cmd.Parameters.AddwithValue("@clave", clave);
    	
    	OleDbDataAdapter dapter = new OleDbDataAdapter(cmd);
    	dapter.Fill(dt);
    
    	return dt;
    }
    
    
    
    private void btn_Ingresar_Click(object sender, EventArgs e)
    {
    		
    		DataTable dt = Consultas.ObtenerRegistros(tbx_Usuario.Text, tbx_Clave.Text);
    
    		string account = dt.Rows[0]["Nombre_Usuario"].ToString().Trim();
    		string pass = dt.Rows[0]["Clave"].ToString().Trim();
    		
    		if (dt.Rows.Count > 0)
    		{
    
    			Formu_Menu men = new Formu_Menu();
    			Formu_Login log = new Formu_Login();
    
    			
    			log.Hide();
    			men.Show(); 
    		}
    		else
    		{
    			MessageBox.Show("Acceso Denegado");
    		}
    	}
    }

    analiza los cambios que aplique en el codigo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    sábado, 24 de noviembre de 2018 13:30
  • Adicional a lo que dice @Leandro Tutini, tienes que revisar la consulta, pon un punto de control (breakPoint) en la linea donde tienes la consulta y revisa como la configura, copias y la revisas en acces si le saca algun resultado

    Suerte!

    sábado, 24 de noviembre de 2018 13:37
  • Muchas gracias, Leandro

    Me gusto que tu codigo sea otra forma de obtener registros, habia estado buscando pero no encontraba con ninguna, gracias por ensenarme algo nuevo.

    En fin, intente usar tu codigo y surgio un error con el AddWithValue, dice:

    CS0161: 'OleDbParameterCollection' no contiene una definicion para 'AddWithValue' …

    Por hacer el intent cree un metodo 'AddWithValue' que devuelva un objeto 'OleDbParameterCollection', pero no funciono

    De nuevo, gracias por tmarte tu tiempo en responder. Saludos

    sábado, 24 de noviembre de 2018 14:01
  • hola

    >>'OleDbParameterCollection' no contiene una definicion para 'AddWithValue'

    ok puede ser que algunos proviers no tengas este metodo, pero se cambia facilmente

    cmd.Parameters.Add("@usuario", usuario);
    cmd.Parameters.Add("@clave", clave);

    y sino

    cmd.Parameters.Add("@usuario", OleDbType.VarChar).Value = usuario;
    cmd.Parameters.Add("@clave", OleDbType.VarChar).Value = clave;

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 24 de noviembre de 2018 18:23