none
Ayuda con el error System.InvalidCastException' RRS feed

  • Pregunta

  • Estoy creando un Login para mi programa, este hace que si te logeas siendo empleado te envía a un formulario 2 y si eres administrador te envia a un tercer formulario el problema es que ese login no me lleva a ningun otro formulario que yo eh creado y me marca el error "Additional information: No se puede convertir un objeto de tipo 'System.Int32' al tipo 'System.String'." ya hice de todo, convertir todos los valores a String, volverlo todo int, usar convert, y aun sigue apareciendo el error, me gustaría que me ayudaran por favor.

                           

    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 System.Data.SqlClient;

    namespace Proyecto_Final
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                string cadena_conexion = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\Users\USUARIO\Documents\Base de datos\Proyecto_Supermerk2.mdb";
                string consulta = "select Count(*) from Cajeros where Usuario=? and Contrasenia=?";
                using (OleDbConnection conexion = new OleDbConnection(cadena_conexion))
                using (OleDbCommand comando = new OleDbCommand(consulta, conexion))
                {
                    conexion.Open();
                    comando.Parameters.AddWithValue("@p1", txt_usuario.Text);
                    comando.Parameters.AddWithValue("@p2", txt_contrasenia.Text);
                    if (txt_usuario.Text != "" && txt_contrasenia.Text != "")
                    {
                        int resultado = (int)comando.ExecuteScalar();
                        if (resultado > 0)
                        {
                            string cadena_conexion2 = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\Users\USUARIO\Documents\Base de datos\Proyecto_Supermerk2.mdb";
                            string consulta2 = "SELECT Count(*) FROM Cajeros where Usuario=? and Rol=?";
                            using (OleDbConnection conexion2 = new OleDbConnection(cadena_conexion2))

                            using (OleDbCommand comando2 = new OleDbCommand(consulta2, conexion2))
                            {
                                conexion2.Open();
                                comando2.Parameters.AddWithValue("@p1", txt_usuario.Text);
                                comando2.Parameters.AddWithValue("@p2", txt_contrasenia.Text);

                                string Rol_encontrado = (string)comando2.ExecuteScalar();

                                if (Rol_encontrado == "administrador")
                                {
                                    Form3 acceso2 = new Form3();
                                    acceso2.Show();
                                    this.Hide();
                                }
                                if (Rol_encontrado == "vendedor" && Rol_encontrado== "encargado" && Rol_encontrado == "vendedora" && Rol_encontrado == "encargada")
                                {
                                    Form2 acceso = new Form2();
                                    acceso.Show();
                                    this.Hide();
                                }
                            }
                        }
                        else
                        {

                            MessageBox.Show("La contraseña o el usuario es incorrecto", "Acceso DENEGADO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                    }
                    else
                        MessageBox.Show("no deje vacio", "Error, los elementos estan vacios", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }

            private static void RetrieveIdentity(string connectionString)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))

                {

                }
            }
            private void Form1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!(Char.IsNumber(e.KeyChar)) && ((e.KeyChar != (char)Keys.Back)) && (e.KeyChar != ','))
                {
                    MessageBox.Show("Uy papasito que chistoso jajaja", "No lo vuelvas a intentar, va? ;3", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    e.Handled = true;
                    return;
                }
            }

            private void txt_contrasenia_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!(Char.IsNumber(e.KeyChar)) && ((e.KeyChar != (char)Keys.Back)) && (e.KeyChar != ','))
                {
                    MessageBox.Show("El programa solo acepta numeros", "hey tenga mas cuidado", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    e.Handled = true;
                    return;
                }
            }

            private void Form1_Load(object sender, EventArgs e)
            {

            }
        }
    }

    todo eso es el codigo. los espero

    sábado, 19 de octubre de 2019 23:01

Todas las respuestas

  • Cuando en una pregunta del foro preguntes acerca de un error, acuérdate de señalar siempre cuál es la línea exacta en la que se produce.

    Examinando tu código, encuentro un sitio donde puede ocurrir el error que mencionas:

     (string)comando2.ExecuteScalar();

    Estás tomando el Object devuelto por el ExecuteScalar y diciéndole al sistema que lo tome como String. Ojo con esto: No lo estás convirtiendo a string. El cast no hace conversiones. Le estás diciendo que es un string. Si no lo es, esa instrucción produce el error que estás viendo de "no se puede convertir int a string".

    Y ciértamente no es un string, porque la sentencia que ejecutas es un "Select Count...", así que siempre va a devolver un int.

    Podrías meter una instrucción de conversión. Pero no es esa la solución. Obviamente, nunca va a funcionar la sentencia que tienes debajo:

    if (Rol_encontrado == "administrador")

    Si el Rol_encontrado es un número entero, nunca puede ser igual a "administrador". Algo falla en la lógica de tu programa. Revisa lo que estás haciendo y cerciórate de que usas el tipo de dato correcto en cada sitio, y las "select" que devuelvan el valor correcto para cada dato.

    domingo, 20 de octubre de 2019 8:36