none
ayuda estoy haciendo un sistema de encuestas y no puedo guardar en la base de datos sqlserver 2014 las preguntas y alternativas ... ayuden con mi codigo porfa RRS feed

  • Pregunta

  •  protected void Button1_Click(object sender, EventArgs e)
            {
    
    
                int  i =0;
                int j = 0;
              
                    SqlCommand cmd = new SqlCommand();
                cmd.Connection = cn.cadena;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "crea_examenp";
                cmd.Parameters.Add("@id_pregunta", SqlDbType.Int).Value = i;
                cmd.Parameters.Add("@pregunta", SqlDbType.NVarChar).Value = txtpregunta.Text;
                cmd.Parameters.Add("@puntaje", SqlDbType.Int).Value = 1;
                cmd.Parameters.Add("@id_examen", SqlDbType.Int).Value = 1;
                cmd.Parameters.Add("@numero_pregunta", SqlDbType.Int).Value = 1;
    
                cmd.CommandText = "crea_examenal";
                cmd.Parameters.Add("@id_pregunta", SqlDbType.Int).Value = j;
                cmd.Parameters.Add("@id_alternativa", SqlDbType.Int).Value = i;
                cmd.Parameters.Add("@correcto", SqlDbType.Int).Value = 1;
                cmd.Parameters.Add("@incorrecto", SqlDbType.Int).Value = 0;
                cmd.Parameters.Add("@descripcion_alternativa", SqlDbType.NVarChar).Value = txtalterna1.Text;
    
                cmd.Parameters.Add("@id_pregunta", SqlDbType.Int).Value = j +1;
                cmd.Parameters.Add("@id_alternativa", SqlDbType.Int).Value = i;
                cmd.Parameters.Add("@correcto", SqlDbType.Int).Value = 1;
                cmd.Parameters.Add("@incorrecto", SqlDbType.Int).Value = 0;
                cmd.Parameters.Add("@descripcion_alternativa", SqlDbType.NVarChar).Value = txtalterna2.Text;
    
                cmd.Parameters.Add("@id_pregunta", SqlDbType.Int).Value = j + 2;
                cmd.Parameters.Add("@id_alternativa", SqlDbType.Int).Value = i;
                cmd.Parameters.Add("@correcto", SqlDbType.Int).Value = 1;
                cmd.Parameters.Add("@incorrecto", SqlDbType.Int).Value = 0;
                cmd.Parameters.Add("@descripcion_alternativa", SqlDbType.NVarChar).Value = txtalterna3.Text;
    
                cmd.Parameters.Add("@id_pregunta", SqlDbType.Int).Value = j + 3;
                cmd.Parameters.Add("@id_alternativa", SqlDbType.Int).Value = i;
                cmd.Parameters.Add("@correcto", SqlDbType.Int).Value = 1;
                cmd.Parameters.Add("@incorrecto", SqlDbType.Int).Value = 0;
                cmd.Parameters.Add("@descripcion_alternativa", SqlDbType.NVarChar).Value = txtalterna4.Text;
    
                cmd.Parameters.Add("@id_pregunta", SqlDbType.Int).Value = j + 4;
                cmd.Parameters.Add("@id_alternativa", SqlDbType.Int).Value = i;
                cmd.Parameters.Add("@correcto", SqlDbType.Int).Value = 1;
                cmd.Parameters.Add("@incorrecto", SqlDbType.Int).Value = 0;
                cmd.Parameters.Add("@descripcion_alternativa", SqlDbType.NVarChar).Value = txtalterna5.Text;
    
    
    
    
    
    
                cn.conectar();
                cmd.ExecuteNonQuery();
                cn.cerrar();        
                              
              
    
            
                Response.Write("<Script>alert('examen creado'); </script>");
    
              
                    
           
          
            }

    miércoles, 25 de octubre de 2017 3:31

Respuestas

  • antes de mandar el código deberías fijarte cuál es el último que tienes registrado

    SqlCommand cmdID = new SqlCommand("Select max(id_pregunta) From alternativa",cn.cadena);
    cn.Conectar();
    int idPregunta = Convert.ToInt32(cmdID.ExecuteScalar());
    cn.Cerrar();
    

    con el la variable idPregunta ya tienes el id máximo de la tabla alternativa que se encuentra tu base de datos y puedes trabajar aumentando de a 1 como lo hacías, por términos que está empezando lo vamos a manejar dee esa forma. El otro Id que necesitas también lo puedes recuperas de la misma forma

    Inténtalo

    Saludos


    Brayan De la Cruz
    Lima - Perú

    miércoles, 25 de octubre de 2017 4:33

Todas las respuestas

  • Hola

    Qué error te sale?

    Veo algo raro, estás mandando dos CommandText en tu código?

      cmd.CommandText = "crea_examenp";
      cmd.Parameters.Add("@id_pregunta", SqlDbType.Int).Value = i;
      cmd.Parameters.Add("@pregunta", SqlDbType.NVarChar).Value = txtpregunta.Text;
      cmd.Parameters.Add("@puntaje", SqlDbType.Int).Value = 1;
      cmd.Parameters.Add("@id_examen", SqlDbType.Int).Value = 1;
      cmd.Parameters.Add("@numero_pregunta", SqlDbType.Int).Value = 1;
      cmd.CommandText = "crea_examenal";

    Si tu intención es llamar a dos procedimientos no es la forma correcta, ya que estás utilizando el mismo Command para ambos, en todo caso deberías optar por crear otro Command, por ejemplo cmd2:

    SqlCommand cmd2 = New SqlCommand();
    cmd2.CommandText = "Otro procedimiento";
    // enviar los valores
    cmd2.Parameters.Add ..
    //ejecutar
    cmd2.ExecuteNonQuery

    Asimismo, enviar tu parámetros y ejecutar con dicho command

    Saludos


    Brayan De la Cruz
    Lima - Perú

    miércoles, 25 de octubre de 2017 3:35
  • gracias me ayudo ya no me sale error pero no me almacena las alternativas por favor tengo duda con el parámetro del id_alternativa es llave primaria al igual que id_pregunta..... tengo duda de eso

    miércoles, 25 de octubre de 2017 3:50
  • Tu llave primaria es identity en tu base de datos? si es así, no necesitas especificarla ya que por cada registro incrementa de 1 en 1 de forma automática. El error que te está saliendo es seguramente porque ya tienes registrado, le estás mandando completamente en duro el código y encima un 0? debería empezar de 1 y que se autoincremente según el campo de tu BD. Te tocaría preguntar a la BD el último ID guardado para que tengas en memoria dicho dato y puedas incrementarlo en cada registro que realizas.


    Brayan De la Cruz
    Lima - Perú

    miércoles, 25 de octubre de 2017 4:00
  • este es mi codigo de BD estoy trabajando con parametros. soy novato en programación


    ALTER procedure [dbo].[crea_examenal] @id_pregunta int, @id_alternativa int, @correcto int, @incorrecto int, @descripcion_alternativa varchar(100) as insert into alternativa (id_pregunta,id_alternativa , correcto,incorrecto,descripcion_alternativa) values (@id_pregunta,@id_alternativa ,@correcto,@incorrecto,@descripcion_alternativa)


    miércoles, 25 de octubre de 2017 4:13
  • antes de mandar el código deberías fijarte cuál es el último que tienes registrado

    SqlCommand cmdID = new SqlCommand("Select max(id_pregunta) From alternativa",cn.cadena);
    cn.Conectar();
    int idPregunta = Convert.ToInt32(cmdID.ExecuteScalar());
    cn.Cerrar();
    

    con el la variable idPregunta ya tienes el id máximo de la tabla alternativa que se encuentra tu base de datos y puedes trabajar aumentando de a 1 como lo hacías, por términos que está empezando lo vamos a manejar dee esa forma. El otro Id que necesitas también lo puedes recuperas de la misma forma

    Inténtalo

    Saludos


    Brayan De la Cruz
    Lima - Perú

    miércoles, 25 de octubre de 2017 4:33