Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con C#

Estas en el tema de Problema con C# en el foro de .NET en Foros del Web. Hola Buenos días. Tengo un problema con c#, y es el siguiente. Yo tengo una tabla con los nombres y contraseñas del usuario. Al escribir ...
  #1 (permalink)  
Antiguo 09/11/2012, 04:44
 
Fecha de Ingreso: abril-2012
Ubicación: Malaga
Mensajes: 46
Antigüedad: 12 años
Puntos: 0
Problema con C#

Hola Buenos días.
Tengo un problema con c#, y es el siguiente.
Yo tengo una tabla con los nombres y contraseñas del usuario.
Al escribir un usuario correcto, me sale que es incorrecto y al no ser correcto me pone Excepción del tipo 'System.IndexOutOfRangeException' en System.Data.dll
El código que tengo es el siguiente:
Código C#:
Ver original
  1. private void btnCon_Click(object sender, EventArgs e)
  2.         {
  3.  
  4.            
  5.  
  6.             SqlConnection cn = new SqlConnection(@"server=.\PACO;user=paco12;password=graduado12;database=VideoClub;");
  7.             try
  8.             {
  9.                
  10.                 SqlCommand cmd = new SqlCommand("select usuario,contraseña from Usuarios where usuario = '"+ txtUsu.Text + "' and contraseña = '"+ txtCon.Text +"'", cn);
  11.                 cn.Open();
  12.                 cmd.ExecuteNonQuery();
  13.                 DataSet ds = new DataSet();
  14.                 SqlDataAdapter da = new SqlDataAdapter(cmd);
  15.                 da.Fill(ds, "Usuarios");
  16.                 DataRow dro;
  17.                 dro = ds.Tables["Usuarios"].Rows[0];
  18.  
  19.                 if ((txtUsu.Text == dro["usuario"].ToString()) || (txtCon.Text == dro["contraseña"].ToString()))
  20.                 {
  21.                     Vista_General vg = new Vista_General();
  22.                     vg.Show();
  23.                     this.Hide();
  24.  
  25.                 }
  26.                
  27.                
  28.                
  29.  
  30.             }
  31.             catch { }
  32.             finally
  33.             {
  34.                 cn.Close();
  35.             }
  36.  
  37.         }
  #2 (permalink)  
Antiguo 09/11/2012, 12:00
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Problema con C#

Hola que tal, el cmd.ExecuteNonQuery(); para que lo ocupas?

Otra cosa, ocupas mostrar los usuarios o para que tienes el DataSet?

  #3 (permalink)  
Antiguo 09/11/2012, 16:50
Avatar de cristiantorres  
Fecha de Ingreso: marzo-2012
Mensajes: 383
Antigüedad: 12 años, 1 mes
Puntos: 61
Respuesta: Problema con C#

Hola.

Primeramente amigo no creo que para hacer un login usar dataset y datatable sea lo mas recomendado, y otra cosa siempre en tus query usa parametros te ahorras muchos problemas.

Has lo siguiente.

Código C:
Ver original
  1. private bool Autenticar(string usuario, string password)
  2. {
  3.         string sql = @"SELECT COUNT(*)
  4.                              FROM Usuarios
  5.                              WHERE usuario = @user AND contraseña = @pass";
  6.  
  7.         using (SqlConnection conn = new SqlConnection(@"server=.\PACO;user=paco12;password=graduado12;database=VideoClub;"))
  8.         {
  9.             conn.Open();//abrimos conexion
  10.  
  11.             SqlCommand cmd = new SqlCommand(sql,conn);
  12.             cmd.Parameters.AddWithValue("@user", usuario);
  13.             cmd.Parameters.AddWithValue("@pass", password);
  14.  
  15.             int count = Convert.ToInt32(cmd.ExecuteScalar());
  16.            
  17.             if (count == 0)
  18.                 return false;
  19.             else
  20.                 return true;
  21.  
  22.         }
  23. }
Tienes un método de tipo bool que si devuelve true es que el logeo se realizo con exito si devuelve false es porque los datos son incorrectos como veras te ayudas de la función count del sql y del metodo ExecuteScalar() del objeto command para comprobar el logueo.

Entonces para hacer el login solo llamarías al método y le pasas los parámetros.
Código C:
Ver original
  1. If(!Autenticar(txtUsu.Text, txtCon.Text))
  2.     MessageBox.Show("Usuario o Contraseña Invalidos");
  3. else
  4. {
  5.    //Si entra aquí es porque el usuario se logueo correctamente
  6. }

Saludos.
__________________
Visita mi Blog C#, vb.net, asp.net, sql, java y mas...
Blog Cristian Torres
  #4 (permalink)  
Antiguo 11/11/2012, 06:25
 
Fecha de Ingreso: abril-2012
Ubicación: Malaga
Mensajes: 46
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con C#

He hecho todos los pasos que me has dicho, pero al final me sale esto:

Excepción no controlada del tipo 'System.FormatException' en mscorlib.dll
Información adicional: La cadena de entrada no tiene el formato correcto.

Me sale cuando conviertes a Int32 com.ExecuteScalar()
Puedes decirme como solucionarlo?

Gracias por vuestra ayuda señores.
  #5 (permalink)  
Antiguo 11/11/2012, 07:05
Avatar de yadderace  
Fecha de Ingreso: marzo-2012
Mensajes: 12
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Problema con C#

Pues yo utilizo el siguiente método para comprobar el logueo.

Código C:
Ver original
  1. public bool ComprobarUsuario(string nombreUsuario,string password)
  2.         {
  3.             string query = "SELECT * From Empleado WHERE Usuario='"+nombreUsuario+"' AND Contraseña='"+password+"'  SELECT SCOPE_IDENTITY()";
  4.             conexion.Open();
  5.  
  6.             SqlDataAdapter da = new SqlDataAdapter(query, conexion);
  7.             DataTable dt = new DataTable();
  8.             da.Fill(dt);
  9.            
  10.             int numRegistros = dt.Rows.Count;
  11.             conexion.Close();
  12.  
  13.  
  14.             if (numRegistros == 1)
  15.             {
  16.                 return true;
  17.             }
  18.             else
  19.             {
  20.                 return false;
  21.             }
  22.            
  23.         }

Solo hay que tener en cuenta que mi tabla Empleado tiene un campo llamado idEmpleado el cual es numeric y tiene acoplada la función agregada identity.
  #6 (permalink)  
Antiguo 11/11/2012, 10:45
Avatar de cristiantorres  
Fecha de Ingreso: marzo-2012
Mensajes: 383
Antigüedad: 12 años, 1 mes
Puntos: 61
Respuesta: Problema con C#

Hola.
es un error un poco raro pero al parecer es un problema con un registro de windows no tiene nada que ver con el código tendrás que cambiar la configuración Regional.
System.FormatException sucede al intentar convertir una cadena numérica en un tipo de datos numéricos
Ve la parte de resolución.

Saludos.
__________________
Visita mi Blog C#, vb.net, asp.net, sql, java y mas...
Blog Cristian Torres
  #7 (permalink)  
Antiguo 11/11/2012, 13:21
 
Fecha de Ingreso: abril-2012
Ubicación: Malaga
Mensajes: 46
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con C#

Sigo con el problema, cambio el formato donde dice pero nada, sigue saliendo lo mismo.
  #8 (permalink)  
Antiguo 13/11/2012, 03:21
 
Fecha de Ingreso: abril-2012
Ubicación: Malaga
Mensajes: 46
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema con C#

Una pregunta.
Yo utilizo Management Studio para tener la base de datos. Si pongo la base de datos dentro de visual studio en vez de utilizar el otro programa, ¿como sería para interactuar con la base de datos?, ¿sería de la misma manera, o tengo que cambiar el método que tengo?

Gracias a todos por vuestras respuestas.

Etiquetas: sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:17.