none
Insertar registros en una tabla maestro detalle con dos cabeceras en c# RRS feed

  • Pregunta

  • Buenas, he creado estos dos procedimientos almacenados para registrar en una tabla Maestro Detalle llamada Enfermedad_Sintoma, mi problema es que no me recupera el id_sintoma de la tabla sintoma.

    • Cambiado Enrique M. Montejo lunes, 8 de agosto de 2016 16:32 Pregunta relacionada con el acceso a datos.
    domingo, 7 de agosto de 2016 22:05

Respuestas

  • Lo puedes hacer todo en un solo insertar
       public string InsertarSintomas()
            {
                string rpta = "";
                SqlConnection sqlCon = new SqlConnection(Conexion.cnx);
                try
                {
                    sqlCon.Open();
                    SqlCommand cmd = new SqlCommand("spinsertar_Sintoma",sqlCon);
                    cmd.CommandType = CommandType.StoredProcedure;
    
                    cmd.Parameters.Add("@id_sintoma", SqlDbType.Int).Direction = ParameterDirection.Output;
                    cmd.Parameters.Add("@des_Sintoma", SqlDbType.VarChar).Value = Des_Sintoma;
    
                    //Ejecutamos nuestros comandos
                    rpta = cmd.ExecuteNonQuery() == 1 ? "OK" : "NO se Ingreso el Registro";
                    if (rpta.Equals("OK"))
                    {
                        //Obtener el còdigo del sintoma generado
                        this.Id_Sintoma = Convert.ToInt32(cmd.Parameters["@id_sintoma"].Value);
                        cmd = new SqlCommand("spinsertar_enfermedad_sintoma", sqlCon);
                        cmd.CommandType = CommandType.StoredProcedure;
    
                        cmd.Parameters.Add("@id_Enfermedad_Sintoma", SqlDbType.Int).Direction = ParameterDirection.Output;
                        cmd.Parameters.Add("@id_Sintoma", SqlDbType.Int).Value = Id_Sintoma;
                        cmd.Parameters.Add("@id_Enfermedad", SqlDbType.Int).Value = ID_ENFERMEDAD;
                        rpta = cmd.ExecuteNonQuery() == 1 ? "OK" : "NO se Ingreso el Registro";
                    }
                }
                catch (Exception ex)
                {
                    rpta = ex.Message;
                }
                finally
                {
                    if (sqlCon.State == ConnectionState.Open)
                    {
                        sqlCon.Close();
                    }
                }
                return rpta;
            }

    lunes, 8 de agosto de 2016 1:12

Todas las respuestas

  • Agrega esto en tu procedure para ver si te recupera el id para probar tu procedure

    set @id_sintoma = SCOPE_IDENTITY();
    PRINT @id_sintoma; 
    
    declare @id_sintoma int
    execute spinsertar_Sintoma @id_sintoma output,'des_Sintoma'



    domingo, 7 de agosto de 2016 22:49
  • public string InsertarSintomas(DSintomas Sintoma)
            {
                string rpta = "";
                SqlConnection sqlCon = new SqlConnection();
                try
                {
                    //Código
                    sqlCon.ConnectionString = Conexion.cnx;
                    sqlCon.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = sqlCon;
                    cmd.CommandText = "spinsertar_Sintoma";
                    cmd.CommandType = CommandType.StoredProcedure;

                    SqlParameter ParIdSintoma = new SqlParameter();
                    ParIdSintoma.ParameterName = "@id_sintoma";
                    ParIdSintoma.SqlDbType = SqlDbType.Int;
                    ParIdSintoma.Direction = ParameterDirection.Output;
                    ParIdSintoma.Value =Sintoma.Id_Sintoma;
                    cmd.Parameters.Add(ParIdSintoma);


                    SqlParameter ParDesSintoma = new SqlParameter();
                    ParDesSintoma.ParameterName = "@des_Sintoma";
                    ParDesSintoma.SqlDbType = SqlDbType.VarChar;
                    ParDesSintoma.Size = 200;
                    ParDesSintoma.Direction = ParameterDirection.Input;
                    ParDesSintoma.Value = Sintoma.Des_Sintoma;
                    cmd.Parameters.Add(ParDesSintoma);

                    //Ejecutamos nuestros comandos
                    rpta = cmd.ExecuteNonQuery() == 1 ? "OK" : "NO se Ingreso el Registro";
                    if (rpta.Equals("OK"))
                    {
                        //Obtener el còdigo del sintoma generado
                        this.Id_Sintoma = Convert.ToInt32(cmd.Parameters["@id_sintoma"].Value);
                    }

                    cmd.Parameters.Clear();
                }
                catch (Exception ex)
                {
                    rpta = ex.Message;
                }
                finally
                {
                    if (sqlCon.State == ConnectionState.Open)
                    {
                        sqlCon.Close();
                    }
                }
                return rpta;
            }

    ---------------------------------------------------------------------------------

    en este código que esta en mi CAPADATOS hay obtengo el id_Sintoma pero no me obtiene ningun valor, ya que lo necesito para poder insertarlo en la tabla Enfermedad_Sintoma----> en formularioControlSintomas donde tengo el evento del boton Guardar hago referencia a la propiedad id_Sintoma para obtener el valor y nada me recupera valor 0 y no se registra el Sintoma para una determinada Enfermedad-----los sintomas si normal se estan registrando

    lunes, 8 de agosto de 2016 0:29
  • <img alt="Allli está mas o menos lo que quiero hacer----> Selecciono la enfermedad luego ingreso los sintomas uno a uno dependiendo de los sintomas que tenga una enfermedad--- esos sintomas los estoy agregando en un Listbox ---> luego esos sintomas que ahoran son elementos del listbox----> los registro sin ningun problema en la tabla SINTOMA Pero a la vez deseo guardar esos sintomas en mi tabla Enfermedad_Sintoma ---> con el id_Enfermedad y los sintomas(items del listbox). Espero puedas ayudarme----" src="https://social.msdn.microsoft.com/Forums/getfile/909352" />
    lunes, 8 de agosto de 2016 0:33
  • public string InsertarSintomas(DSintomas Sintoma)
            {
                string rpta = "";
                SqlConnection sqlCon = new SqlConnection();
                try
                {
                    //Código
                    sqlCon.ConnectionString = Conexion.cnx;
                    sqlCon.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = sqlCon;
                    cmd.CommandText = "spinsertar_Sintoma";
                    cmd.CommandType = CommandType.StoredProcedure;

                    SqlParameter ParIdSintoma = new SqlParameter();
                    ParIdSintoma.ParameterName = "@id_sintoma";
                    ParIdSintoma.SqlDbType = SqlDbType.Int;
                    ParIdSintoma.Direction = ParameterDirection.Output;
                    ParIdSintoma.Value =Sintoma.Id_Sintoma;
                    cmd.Parameters.Add(ParIdSintoma);


                    SqlParameter ParDesSintoma = new SqlParameter();
                    ParDesSintoma.ParameterName = "@des_Sintoma";
                    ParDesSintoma.SqlDbType = SqlDbType.VarChar;
                    ParDesSintoma.Size = 200;
                    ParDesSintoma.Direction = ParameterDirection.Input;
                    ParDesSintoma.Value = Sintoma.Des_Sintoma;
                    cmd.Parameters.Add(ParDesSintoma);

                    //Ejecutamos nuestros comandos
                    rpta = cmd.ExecuteNonQuery() == 1 ? "OK" : "NO se Ingreso el Registro";
                    if (rpta.Equals("OK"))
                    {
                        //Obtener el còdigo del sintoma generado
                        this.Id_Sintoma = Convert.ToInt32(cmd.Parameters["@id_sintoma"].Value);
                    }

                    cmd.Parameters.Clear();
                }
                catch (Exception ex)
                {
                    rpta = ex.Message;
                }
                finally
                {
                    if (sqlCon.State == ConnectionState.Open)
                    {
                        sqlCon.Close();
                    }
                }
                return rpta;
            }

    ---------------------------------------------------------------------------------

    en este código que esta en mi CAPADATOS hay obtengo el id_Sintoma pero no me obtiene ningun valor, ya que lo necesito para poder insertarlo en la tabla Enfermedad_Sintoma----> en formularioControlSintomas donde tengo el evento del boton Guardar hago referencia a la propiedad id_Sintoma para obtener el valor y nada me recupera valor 0 y no se registra el Sintoma para una determinada Enfermedad-----los sintomas si normal se estan registrando


    lunes, 8 de agosto de 2016 0:46
  • <img alt="Allli está mas o menos lo que quiero hacer----> Selecciono la enfermedad luego ingreso los sintomas uno a uno dependiendo de los sintomas que tenga una enfermedad--- esos sintomas los estoy agregando en un Listbox ---> luego esos sintomas que ahoran son elementos del listbox----> los registro sin ningun problema en la tabla SINTOMA Pero a la vez deseo guardar esos sintomas en mi tabla Enfermedad_Sintoma ---> con el id_Enfermedad y los sintomas(items del listbox). Espero puedas ayudarme----" src="https://social.msdn.microsoft.com/Forums/getfile/909352" />

    lunes, 8 de agosto de 2016 0:46
  • Lo puedes hacer todo en un solo insertar
       public string InsertarSintomas()
            {
                string rpta = "";
                SqlConnection sqlCon = new SqlConnection(Conexion.cnx);
                try
                {
                    sqlCon.Open();
                    SqlCommand cmd = new SqlCommand("spinsertar_Sintoma",sqlCon);
                    cmd.CommandType = CommandType.StoredProcedure;
    
                    cmd.Parameters.Add("@id_sintoma", SqlDbType.Int).Direction = ParameterDirection.Output;
                    cmd.Parameters.Add("@des_Sintoma", SqlDbType.VarChar).Value = Des_Sintoma;
    
                    //Ejecutamos nuestros comandos
                    rpta = cmd.ExecuteNonQuery() == 1 ? "OK" : "NO se Ingreso el Registro";
                    if (rpta.Equals("OK"))
                    {
                        //Obtener el còdigo del sintoma generado
                        this.Id_Sintoma = Convert.ToInt32(cmd.Parameters["@id_sintoma"].Value);
                        cmd = new SqlCommand("spinsertar_enfermedad_sintoma", sqlCon);
                        cmd.CommandType = CommandType.StoredProcedure;
    
                        cmd.Parameters.Add("@id_Enfermedad_Sintoma", SqlDbType.Int).Direction = ParameterDirection.Output;
                        cmd.Parameters.Add("@id_Sintoma", SqlDbType.Int).Value = Id_Sintoma;
                        cmd.Parameters.Add("@id_Enfermedad", SqlDbType.Int).Value = ID_ENFERMEDAD;
                        rpta = cmd.ExecuteNonQuery() == 1 ? "OK" : "NO se Ingreso el Registro";
                    }
                }
                catch (Exception ex)
                {
                    rpta = ex.Message;
                }
                finally
                {
                    if (sqlCon.State == ConnectionState.Open)
                    {
                        sqlCon.Close();
                    }
                }
                return rpta;
            }

    lunes, 8 de agosto de 2016 1:12