Ejemplo n.º 1
0
        public ModeloExamen obtenerPreguntas(int idCarrera) //traer preguntas aleatoriamente
        {
            String sql = "SELECT * FROM pregunta where idCarrera='" + idCarrera + "' ORDER BY RAND() LIMIT 5";

            MySqlConnection connection = null;
            MySqlDataReader lector     = null;

            ModeloExamen modeloExamen = new ModeloExamen();

            //AGARRAR UNA CLASE Y LLENARLE LA LISTA DE PREGUNTAS

            try
            {
                MySqlCommand cmd = new MySqlCommand();
                connection         = Conexion.getConexion();
                cmd.Connection     = connection;
                cmd.CommandType    = System.Data.CommandType.Text;
                cmd.CommandText    = sql; //asigna el sql que voy a consultar
                cmd.CommandTimeout = 240;
                connection.Open();

                lector = cmd.ExecuteReader(); //lector es un puntero a las filas. Se para en el principio.

                if (lector.HasRows)           //pregunta si tiene filas
                {
                    while (lector.Read())     //automaticamente cuando lea, va pasar fila por fila. Mientras lea.
                    {
                        Preguntas preguntas = new Preguntas();
                        preguntas.idPregunta = lector.GetInt32(lector.GetOrdinal("idPregunta")); //devuelve el id de la columna o el alias de la consulta
                        //GetInt32 es para un int
                        //getOrdinal me devuelve el indice de la columna que pasas por param
                        preguntas.idTipoPregunta = lector.GetInt32(lector.GetOrdinal("idTipoPregunta"));
                        preguntas.consigna       = lector.GetString(lector.GetOrdinal("consigna"));

                        modeloExamen.lstPreguntas.Add(preguntas); //se completa el modelo con las preguntas
                    }
                }
                lector.Close(); //SIEMPRE CERRAR EL LECTOR.  cerrar porque si posteriormente hago una consulta, no voy a poder.
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Error durante la generación automática del examen!" + ex.Message);
            }
            finally
            {
                if (lector != null)
                {
                    lector.Close();
                }
                if (connection != null)
                {
                    connection.Close();
                }
            }
            return(modeloExamen);
        }
Ejemplo n.º 2
0
        [WebMethod] //es un webMethodo que se puede acceder desde afuera
        public string guardarModeloExamen(ModeloExamen modelo)
        {
            String          sql        = "INSERT INTO modeloExamen( `idCarrera`) VALUES (" + modelo.idCarrera + ")";
            MySqlConnection connection = null;
            //MySqlDataReader lector = null;

            String          retorno   = "false";
            MySqlDataReader lector    = null;
            int             idMaxPreg = 0;

            //creo la instancia para abrir una transaccion y poder hacer rollback o comitear
            //se crea fuera del try como null para poder agarrarla en el cartch, pero se abri adentro del try
            MySqlTransaction trans = null;

            try
            {
                MySqlCommand cmd = new MySqlCommand();
                connection         = Conexion.getConexion();
                cmd.Connection     = connection;
                cmd.CommandType    = System.Data.CommandType.Text;
                cmd.CommandText    = sql;//con el cmd.CommandText yo seteo el sql a ejecutar
                cmd.CommandTimeout = 240;
                connection.Open();

                trans           = connection.BeginTransaction();
                cmd.Transaction = trans;

                cmd.ExecuteNonQuery();//cone sta funcion ejecuto el sql
                //como es un insert no devuelve nada, se usa el metodo EXECUTENONQUERY.

                //recorro la pregunta que recibi por parametro y por cada iteracion inserto los valores que recibi
                for (int i = 0; i < modelo.lstPreguntas.Count; i++)
                {
                    sql             = "INSERT INTO examenpregunta(idModeloExamen, idPregunta) VALUES( (select max(idModeloExamen) as idModeloExamen from modeloExamen) , " + modelo.lstPreguntas[i].idPregunta + ")";
                    cmd.CommandText = sql; //cargo el sql
                    cmd.ExecuteNonQuery(); // ejecuto la consulta
                    //y listo ya inserte en la BD las respuesta correspondientes a la pregunta.
                }

                retorno = "true";
                //comitea la transaccion sino quedara trabada la tabla a insertar
                if (trans != null)
                {
                    trans.Commit();
                }
            }
            catch (Exception ex)
            {
                //rollback si algo salio mal
                if (lector != null)
                {
                    lector.Close();
                }
                if (trans != null)
                {
                    trans.Rollback();
                }
                System.Diagnostics.Debug.WriteLine("Error durante el inicio de sesión!" + ex.Message);
            }
            finally
            {
                if (lector != null)
                {
                    lector.Close();
                }
                if (connection != null)
                {
                    connection.Close();
                }
            }
            return(retorno);
        }