none
Ayuda registrar un usuario en base de datos C# RRS feed

  • Pregunta

  • Hola, necesito ayuda con un tema de INSERT INTO:
    yo inicio mi programa registro al usuario, todos los parametros del usuario se añaden correctamente y cuando ejecuta el metodo 
    int resultado = (int)Consulta.ExecuteNonQuery(); para ejecutar la consulta se me traba el programa y la excepcion que me aparece es "Parameter[5]: la propiedad OleDbType no está inicializada: OleDbType.Empty." y en mi al inicio de mi programa yo ya puse:

    static string Proveedor = @"Provider=Microsoft.ACE.OLEDB.12.0;
                Data Source=|DataDirectory|\Database1.accdb";

    static OleDbConnection conn = new OleDbConnection();

    conn.ConnectionString = Proveedor;

    OleDbCommand Consulta = conn.CreateCommand();
    Consulta.CommandType = System.Data.CommandType.StoredProcedure;
    Consulta.CommandText = "AgregarJugador";


                    OleDbParameter nombre = new OleDbParameter("nombre", jugadorAAgregar.nombre);
                    OleDbParameter apellido = new OleDbParameter("apellido", jugadorAAgregar.apellido);
                    OleDbParameter foto = new OleDbParameter("foto", "");
                    OleDbParameter edad = new OleDbParameter("edad", Convert.ToInt32(jugadorAAgregar.edad));
                    OleDbParameter telefono = new OleDbParameter("telefono", Convert.ToInt32(jugadorAAgregar.telefono));
                    OleDbParameter calificacion = new OleDbParameter("calificacion", 0);
                    OleDbParameter cantidaddevotos = new OleDbParameter("cantidaddevotos", 0);
                    OleDbParameter email = new OleDbParameter("email", jugadorAAgregar.email);
                    OleDbParameter contraseña = new OleDbParameter("contraseña", jugadorAAgregar.contraseña);

                    Consulta.Parameters.Add(nombre);
                    Consulta.Parameters.Add(apellido);
                    Consulta.Parameters.Add(foto);
                    Consulta.Parameters.Add(edad);
                    Consulta.Parameters.Add(telefono);
                    Consulta.Parameters.Add(calificacion);
                    Consulta.Parameters.Add(cantidaddevotos);
                    Consulta.Parameters.Add(email);
                    Consulta.Parameters.Add(contraseña);

                    int resultado = (int)Consulta.ExecuteNonQuery();
                    bool funciono = false;
                    if (resultado == 1)
                    {
                        funciono = true;
                    }

                    conn.Close();
                    return funciono;

    Una cosa mas para agregar, en mi registro yo registre 2 usuarios pero los elimine osea que este deberia ser el tercero, no se si esto puede tener algo que ver


    • Editado EZEBIK miércoles, 3 de mayo de 2017 14:45
    miércoles, 3 de mayo de 2017 14:20

Respuestas

  • Hola, te hice caso y entre tus respuestas y esto 

    https://msdn.microsoft.com/es-es/library/system.data.oledb.oledbparameter.value(v=vs.110).aspx 

    logre hacerlo funcionar, muchas gracias te dare puntos a todas tus respuestas de esta pregunta.

    • Marcado como respuesta EZEBIK miércoles, 3 de mayo de 2017 15:51
    miércoles, 3 de mayo de 2017 15:51

Todas las respuestas

  • Hola EZEBIK

    Pero la forma en que estás llamando a tu procedimiento no es la correcta, no le especificas los parámetros, inténtalo de esa forma y fíjate que le estés pasando los parámetros con el tipo de dato que esperas en el procedimiento.

    static string Proveedor = @"Provider=Microsoft.ACE.OLEDB.12.0;
                Data Source=|DataDirectory|\Database1.accdb";
    OleDbConnection conn = new OleDbConnection("AgregarJugador",Proveedor);
    conn.CommandType = System.Data.CommandType.StoredProcedure;
    conn.Parameters.Add("@parametro1", OleDbType.varchar).Value =  valorparametro1;
    conn.Parameters.Add("@parametro2", OleDbType.varchar).Value =  valorparametro2;
    conn.Parameters.Add("@parametro3", OleDbType.varchar).Value =  valorparametro3; int resultado = Convert.ToInt32(conn.ExecuteNonQuery());

    Saludos


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


    miércoles, 3 de mayo de 2017 14:33
  • hola

    porque defines variables con "static" ? eso no esta bien, menos aun en un proyecto web

    >>a excepcion que me aparece es "Parameter[5]: la propiedad OleDbType no está inicializada: OleDbType.Empty."

    porque usas el OleDbType.Empty ? no tiene sentido

    que pasa si defienes un tipo de dato valido para el parametro, es mas esta claro que debes revisar como asignas los valores a los parametros porque parece que allie sta el problema

    >>en mi registro yo registre 2 usuarios pero los elimine osea que este deberia ser el tercero, no se si esto puede tener algo que ver

    no veo que eso tenga que afectar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 3 de mayo de 2017 14:37
  • perdon, me olvide de poner 2 cosas, una yo trabajo en access y la otra no puse completo mi codigo falto esto:
    OleDbCommand Consulta = conn.CreateCommand();
                    Consulta.CommandType = System.Data.CommandType.StoredProcedure;
                    Consulta.CommandText = "AgregarJugador";

                    OleDbParameter nombre = new OleDbParameter("nombre", jugadorAAgregar.nombre);
                    OleDbParameter apellido = new OleDbParameter("apellido", jugadorAAgregar.apellido);
                    OleDbParameter foto = new OleDbParameter("foto", "");
                    OleDbParameter edad = new OleDbParameter("edad", Convert.ToInt32(jugadorAAgregar.edad));
                    OleDbParameter telefono = new OleDbParameter("telefono", Convert.ToInt32(jugadorAAgregar.telefono));
                    OleDbParameter calificacion = new OleDbParameter("calificacion", 0);
                    OleDbParameter cantidaddevotos = new OleDbParameter("cantidaddevotos", 0);
                    OleDbParameter email = new OleDbParameter("email", jugadorAAgregar.email);
                    OleDbParameter contraseña = new OleDbParameter("contraseña", jugadorAAgregar.contraseña);

                    Consulta.Parameters.Add(nombre);
                    Consulta.Parameters.Add(apellido);
                    Consulta.Parameters.Add(foto);
                    Consulta.Parameters.Add(edad);
                    Consulta.Parameters.Add(telefono);
                    Consulta.Parameters.Add(calificacion);
                    Consulta.Parameters.Add(cantidaddevotos);
                    Consulta.Parameters.Add(email);
                    Consulta.Parameters.Add(contraseña);

    perdon y gracias por las respuestas

    miércoles, 3 de mayo de 2017 14:40
  • hola

    porque defines variables con "static" ? eso no esta bien, menos aun en un proyecto web

    >>a excepcion que me aparece es "Parameter[5]: la propiedad OleDbType no está inicializada: OleDbType.Empty."

    porque usas el OleDbType.Empty ? no tiene sentido

    Hola Leandro, gracias por tu respuesta, el static lo uso solo para la funcion no en las variables y no uso oledbtype.empty por eso es que no entiendo porque me sale este error. gracias
    miércoles, 3 de mayo de 2017 14:44
  • Recien edite la pregunta porque le faltaba parte del codigo, gracias por las respuestas pero aun no encuentro la solucion.
    miércoles, 3 de mayo de 2017 14:46
  • EZEBIK

    Por qué lo manejas con parámetros? , por qué no lo trabajas como te estaba sugiriendo, es lo mismo

    string Proveedor = @"Provider=Microsoft.ACE.OLEDB.12.0;
                Data Source=|DataDirectory|\Database1.accdb";
    OleDbConnection conn = new OleDbConnection("AgregarJugador",Proveedor);
    conn.CommandType = System.Data.CommandType.StoredProcedure;
    conn.Parameters.Add("@parametro1", OleDbType.varchar).Value =  valorparametro1;
    conn.Parameters.Add("@parametro2", OleDbType.varchar).Value =  valorparametro2;
    conn.Parameters.Add("@parametro3", OleDbType.varchar).Value =  valorparametro3;
    int resultado = Convert.ToInt32(conn.ExecuteNonQuery());

    Pero si gustas seguir trabajandolo como lo vienes haciendo, lo que te falta es especificar el tipo de dato, por ejemplo

    OleDbParameter nombre = new OleDbParameter("nombre",OleDbType.VarChar,50, jugadorAAgregar.nombre);

    Deberías hacerlo en cada parámetro, recuerda que OleDbType.varchar (sería varchar y la precision 50), pruébalo

    Saludos


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

    • Marcado como respuesta EZEBIK miércoles, 3 de mayo de 2017 14:53
    • Desmarcado como respuesta EZEBIK miércoles, 3 de mayo de 2017 14:53
    miércoles, 3 de mayo de 2017 14:51
  • OleDbParameter nombre = new OleDbParameter("nombre",OleDbType.VarChar,50, jugadorAAgregar.nombre);

    Deberías hacerlo en cada parámetro, recuerda que OleDbType.varchar (sería varchar y la precision 50), pruébalo

    Hola, quiero probar tu respuesta pero no entiendo si tengo que cambiarle el .varchar por string y modificar tambien la precision, me explicarias por favor, muchas gracias por tu respuesta.
    miércoles, 3 de mayo de 2017 14:55
  • Hola EZEBIK

    Es varchar, porque es el tipo de dato de la base de datos, si el campo nombre en tu bd es varchar (colocas varchar), si es char colocarías char, debes especificar todos los parámetros de esa forma. En caso tengas un entero (int) sería OleDbType.Int y no le pondrias ninguna precisión como por ejemplo en el caso del varhcar (50) 

    Algo así:

    OleDbParameter nombre = new OleDbParameter("nombre",OleDbType.TipodeDato,50, jugadorAAgregar.nombre);
    OleDbParameter edad = new OleDbParameter("edad", OleDbType.Int,Convert.ToInt32(jugadorAAgregar.edad));
    gadorAAgregar.contraseña);

    Saludos


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

    miércoles, 3 de mayo de 2017 15:00
  • Hola, muchas gracias por la respuesta pero no me sirvio, ya que me aparecen otros errores porque es otra forma de pasar parametros, igual gracias. Si alguno tiene otra respuesta lo agradeceria, gracias.
    miércoles, 3 de mayo de 2017 15:23
  • EZEBIK

    No lo estás aplicando de manera correcta, puedes probarlo como en un principio te sugerí? debió haberte salido con lo anterior, pero la mejor manera de hacerlo es así:

    Crear tu comando, lo asocias a tu conexión y vas especificando uno a uno los parámetros con el valor correspondiente

    string Proveedor = @"Provider=Microsoft.ACE.OLEDB.12.0;
                Data Source=|DataDirectory|\Database1.accdb";
    OleDbConnection conn = new OleDbConnection(Proveedor);
    OleDbCommand Consulta = conn.CreateCommand("AgregarJugador", conn); Consulta.CommandType = System.Data.CommandType.StoredProcedure; Consulta.Parameters.AddWithValue("@nombre", jugadorAAgregar.nombre); //agrega los otros parámetros .. .. . .... .. .... int resultado = Convert.ToInt32(conn.ExecuteNonQuery());

    Por otro lado, agrega las referencias: 

    using System.Data;
    using System.Data.OleDb;

    Utiliza esa forma o realiza un debug, un paso a paso y fíjate cuáles son los errores y coméntanos. Las soluciones que te estamos sugiriendo no están erróneas.

    Saludos


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

    miércoles, 3 de mayo de 2017 15:30
  • Hola, te hice caso y entre tus respuestas y esto 

    https://msdn.microsoft.com/es-es/library/system.data.oledb.oledbparameter.value(v=vs.110).aspx 

    logre hacerlo funcionar, muchas gracias te dare puntos a todas tus respuestas de esta pregunta.

    • Marcado como respuesta EZEBIK miércoles, 3 de mayo de 2017 15:51
    miércoles, 3 de mayo de 2017 15:51