none
Como crear un LOGIN con C# y conectado ORACLE? RRS feed

  • Pregunta

  • Hola amigos quiero hacer un login en C# y mi BD está hecha en ORACLE, intente hacerla segun un login que ya cree en C# con SQL pero simplemente no doy con la solucion acá les mando las 2 formas en las que lo he intentado. De antemano muchas gracias por la ayuda.

    1° forma:

            

    public int user(string nombre, string password)
        {
            int valor = 0;
            int retorna = 0;
            OracleConnection cn = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["conexion"].ConnectionString);
            OracleCommand cmd = new OracleCommand("obtener_numero", cn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("nicks", OracleType.VarChar).Value = nombre;
            cmd.Parameters.Add("pass", OracleType.VarChar).Value = password;
             valor = int.Parse(cmd.ExecuteOracleScalar().ToString());

            if (valor == 1)
            {
                retorna = 1;
            }
            else
            {
                retorna = 0;
            }
            return retorna;
            cn.Close();

        }
    }

    2° forma:

     public bool existe(string nombre, string password)
        {
            bool retorno = false;
            int valor = 0;

            OracleConnection cn = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["prueba"].ConnectionString);
            OracleCommand cmd = new OracleCommand();
            cmd.Connection = cn;
            cn.Open();
            cmd.CommandText = "select * from usuario where login='" + nombre + "' and password='" + password + "'";
            valor = int.Parse(cmd.ExecuteScalar().ToString());
            if (valor == 0)
            {
                retorno = false;

            }
            else 
            {
                retorno = true;
            }
            cn.Close();
            return retorno;
        }

    En ambas situaciones yo ocupo esta pagin.aspx de donde llamo a estas clases anteriores mencionadas:

     protected void Button1_Click(object sender, EventArgs e)
        {

            bool retorna = false;

            Class1 BD = new Class1();

            retorna = BD.existe(TextBox1.Text, TextBox2.Text);
            if (retorna == true)
            {
                bool retorno1 = false;
                retorno1 = BD.tipouser(TextBox1.Text, TextBox2.Text);
                if (retorno1 == true)
                {
                    Session["tipousuario"] = "admin";
                    Response.Redirect("administrador.aspx");

                }
                else
                {
                    Session["login"] = TextBox1.Text;
                    Session["tipousuario"] = "mortal";
                    Response.Redirect("perfil.aspx");
                }
            }
            else
            {
                Response.Write("Usuario o Password es incorrecto o no existe");
            }



        }
    }

    lunes, 19 de noviembre de 2012 23:47

Todas las respuestas

  • Hola,

    para mi la lógica que aplicas está bien, qué error te sale o que no consigues hacer?.

    Saludos.

    lunes, 19 de noviembre de 2012 23:54
  • Amigo sabes: acabo de cometer un error fatal! El codigo está perfecto simplemente que en la segunda forma el campo "login" estaba erroneo por el campo correcto en mi tabla es: nick ya lo corregi y está corriendo perfectamente! Gracias de todos modos! Bueno aunque a mi me hubiera gustado saber si me puedes ayudar con el login que intente en la primera forma con funciones pues no doy compa! gracias por tu respuesta! 
    martes, 20 de noviembre de 2012 0:20
  • hola

    no suaste esta guia no

    Build a .NET Application on the Oracle Database with Visual Studio 2005 or 2008

    esta muy bien explicada

    ya usaria la forma 2 que devuelve un bool, lo unico que usaria parametros, eso si mira que los parametros se define con dos puntos

    algo como esto

     public bool existe(string nombre, string password)
    {
    	bool retorno = false;
    
    	string connstring = System.Configuration.ConfigurationManager.ConnectionStrings["prueba"].ConnectionString;
    	using(OracleConnection cn = new OracleConnection(connstring))
    	{
    		cn.Open();
    		
    		string query = "select COUNT(*) from usuario where login= :nombre and password= :password ";
    		OracleCommand cmd = new OracleCommand(query, cn);
    		cmd.Parameters.Add(":nombre", OracleType.VarChar).Value = nombre;
    		cmd.Parameters.Add(":password", OracleType.VarChar).Value = password;
    
    		int valor = Convert.ToInt32(cmd.ExecuteScalar());
    		if (valor == 0)
    			retorno = false;
    		else 
    			retorno = true;
    	}
    	
    	return retorno;
    }

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    martes, 20 de noviembre de 2012 1:51
  • Leandro Muchas gracias!! Y el link que mandaste lo he "medio ojeado" y se antoja interesante.

    Gracias!

    martes, 20 de noviembre de 2012 2:06
  • Hola,

    Una salvedad al respecto. Jamás implementaría un sistema de login de esa forma y os explico. El primero que has planteado nunca puesto que es el ejemplo de libro de Sql Injection. 

    El que plantea Leandro tampoco, puesto que si por cualquier cosa te logran hacer Sql Injection jamas compruebas que el usuario y el password devuelto por la bb.dd es el mismo que con el que haces la where. No utilices jamas un Count(*) para hacer un sistema de login. Pregunta si valor devuelto por bb.dd == a Valor del parametro, con eso jamas fallarás:)

    Saludos.


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    martes, 20 de noviembre de 2012 20:44
    Moderador
  • Hola de nuevo Leandro:

    Probé mi codigo de nuevo (pues me habia equivocado al poner el nombrel campo era "nick" no "login") pues bueno y grandiosamente me ejecuto y me alegre como no te imaginas. Sin embargo al estar seguro de mi victoria segui arreglando la BD con la que trabajo y cuando quise volver a probarla: nada! de nuevo el mismo problema que solo me tiraba 0 . Tratando de hacer lo imposible por ver cual era la causa hasta hoy al fin de casualidad hago un sencillo: "select * from usuario" y que crees? no hay ni una sola linea de datos! cuando ayer tenia 3! no se si es icnreible pero es cierto! y ahora que le meto datos a esa tabla (solo por prueba) ahora al compilar me da el siguiente error:

    Codigo de usuario no controlo InvalidOperationException
    el intento de cargar las bibliotecas de clientes oracle lanzó BadImageFormatException. Este
    problema ocurrirá  al ejecutar el modo 64bits con los componentes cliente de oracle de 32 bits 
    instalados. 

    Que hágo? será que tengo mal instalado mi oracle? ocupe el mismo codigo que puse arriba el cual es el de la 2° forma y luego el de Leandro pero en ambos me da error en  

    valor = int.Parse(cmd.ExecuteScalar().ToString()); o en el otro:

    int valor = Convert.ToInt32(cmd.ExecuteScalar());

    Por favor ayuda amigos!

     
    martes, 20 de noviembre de 2012 22:00
  • Hola Alejo_Blue.

    Veo que no me haces caso cuando la respueta a tu problema son dos.

    1. Busca "BadImageFormatException" en internet. Tienes tu solución.

    2. Lee esto detenidamente y si quieres te explico:). Lo dedico a su señoría.

    http://geeks.ms/blogs/phurtado/archive/2012/11/21/avanzamos-de-sql-inyection-a-ssjs-server-side-javascript-inyection.aspx

    Saludos,


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    miércoles, 21 de noviembre de 2012 15:36
    Moderador
  • Hola Alejo, me uno a lo q te dice Pedro, una cosa es hacer q algo te fucione (aspi no este bien hecho) y otra es hacerlo de la mejor manera, realmnete lo q te plantea Pedro es algo de suma importancia, el tema de seguridad y sobretodo en las aplicaicones web es un tema critico, q se debe tener presente en todo el proceso de desarrollo, si de casualidad tu app es sensible a ataques por sql creeme q tendras graves problemas,y no se resume a q el login no te funcione, se resume a q puedes perder datos, o incluso toda tu BD!! (creo q eso no te gustaria)

    El otro tem del uso de *, bueno eso es algo q jamas debes usar, es lento, hace q tu consulta se demore más, etc.. en toda empresa deberia estar la politica de prohibir el uso del *.

    Y Pedro, excelente post!

    Saludos!


    Julio Avellaneda
    Core Group Comunidad BDotNet
    MVP | MCTS | MCC | MCS
    Blog !!

    miércoles, 21 de noviembre de 2012 15:43