none
Extraer datos específicos de una consulta ? RRS feed

  • Pregunta

  • Estimados,

    Estoy usando ODAC para el acceso a datos y estoy implemenando una query  para validar un login pero quiero capturar los campos de la consulta individualmente e insertarlos en variables, alguna idea de como conseguirlo ? hasta el momento tengo lo siguiente:

          
    OracleConnection con = new OracleConnection(dataSource);
    con.Open();
    string sql = "select username, pass, nombre, apellido from usuario where username='" + strUsername + "' and pass='" + strPassword + "'";
    query = new OracleCommand(sql, con);
    query.ExecuteNonQuery();
    
    
                   

    mi idea es capturar el nombre y apellido en variables string.

    Pd: en primera instancia utilize ExecuteScalar pero este método sólo me captura el primer campo y yo necesito mas de 1. Debería crear algun dataset o algo asi ?



    • Editado Alan Moncada sábado, 15 de abril de 2017 22:40 Contenido
    sábado, 15 de abril de 2017 22:31

Respuestas

  • Hola Alan Moncada

    Utiliza tus parámetros de esta manera y utilizar un datareader, luego lo llenas en donde lo necesites, en este ejemplo te lo coloco en textbox:
    Te dejo mas info al respecto: Clase OracleDataReader

    OracleConnection con = new OracleConnection(dataSource);
    string sql = "select username, pass, nombre, apellido from usuario where username= @strUsername  and pass= @strPassword";
    query = new OracleCommand(sql, con);
    query.AddWithValue("@strUsername",strUsername); 
    query.AddWithValue("@strPassword",strPassword);
    con.Open(); using(OracleDataReader reader = query.ExecuteReader()) { while (reader.Read()) { txtnombre.Text =reader.GetString("nombre"), txtapellido.Text =reader.GetString("apellido"), ... ... } }

    Saludos



    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.



    sábado, 15 de abril de 2017 22:51
  • Hola Alan Moncada,

    El 'ExecuteScalar' retornará el valor de la columna uno de la primera fila, por lo que no te serviría en este caso, tienes que hacer uso del 'ExecuteReader', además recomendaría parametrizar la consulta usando la propiedad Parameters.

    using (OracleConnection con = new OracleConnection("MiCadenaConexion"))
    {
        string sql = "select, nombre, apellido from usuario " +
                        "where username = :usu and pass = :con";
    
        OracleCommand cmd = new OracleCommand(sql, con);
        cmd.Parameters.Add(new OracleParameter("usu", strUsername));
        cmd.Parameters.Add(new OracleParameter("con", strPassword));
    
        OracleDataReader reader = cmd.ExecuteReader();
    
        //Si hay datos..
        if (reader.HasRows)
        {
            if (reader.Read()) //Leemos..como es un solo registro usamos un if
            {
                string nombre = reader["nombre"].ToString();
                string apellido = reader["apellido"].ToString();
    
                //Opcional, mostramos un mensaje con los datos..
                MessageBox.Show(string.Format("El usuario es : {0}, {1}",
                    nombre, apellido));
            }
        }
    }

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Alan Moncada sábado, 15 de abril de 2017 23:43
    sábado, 15 de abril de 2017 22:56

Todas las respuestas

  • Hola Alan Moncada

    Utiliza tus parámetros de esta manera y utilizar un datareader, luego lo llenas en donde lo necesites, en este ejemplo te lo coloco en textbox:
    Te dejo mas info al respecto: Clase OracleDataReader

    OracleConnection con = new OracleConnection(dataSource);
    string sql = "select username, pass, nombre, apellido from usuario where username= @strUsername  and pass= @strPassword";
    query = new OracleCommand(sql, con);
    query.AddWithValue("@strUsername",strUsername); 
    query.AddWithValue("@strPassword",strPassword);
    con.Open(); using(OracleDataReader reader = query.ExecuteReader()) { while (reader.Read()) { txtnombre.Text =reader.GetString("nombre"), txtapellido.Text =reader.GetString("apellido"), ... ... } }

    Saludos



    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.



    sábado, 15 de abril de 2017 22:51
  • Hola Alan Moncada,

    El 'ExecuteScalar' retornará el valor de la columna uno de la primera fila, por lo que no te serviría en este caso, tienes que hacer uso del 'ExecuteReader', además recomendaría parametrizar la consulta usando la propiedad Parameters.

    using (OracleConnection con = new OracleConnection("MiCadenaConexion"))
    {
        string sql = "select, nombre, apellido from usuario " +
                        "where username = :usu and pass = :con";
    
        OracleCommand cmd = new OracleCommand(sql, con);
        cmd.Parameters.Add(new OracleParameter("usu", strUsername));
        cmd.Parameters.Add(new OracleParameter("con", strPassword));
    
        OracleDataReader reader = cmd.ExecuteReader();
    
        //Si hay datos..
        if (reader.HasRows)
        {
            if (reader.Read()) //Leemos..como es un solo registro usamos un if
            {
                string nombre = reader["nombre"].ToString();
                string apellido = reader["apellido"].ToString();
    
                //Opcional, mostramos un mensaje con los datos..
                MessageBox.Show(string.Format("El usuario es : {0}, {1}",
                    nombre, apellido));
            }
        }
    }

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Alan Moncada sábado, 15 de abril de 2017 23:43
    sábado, 15 de abril de 2017 22:56