none
Ayuda con insert a dos tablas con store procedure en c#

    Pregunta

  • Saludos, alguien que me pueda ayudar con un problema al guardar datos en dos tablas distintas mediante su relación, a continuación detallo el problema y el código

    Aquí capturo los datos obtenidos del combobox

    cm.tipemp = cbtipemp.SelectedItem.ToString();

    el cual paso al método en la ClaMet

    public string tipemp { get; set; }  

    que a su vez paso este método al parámetro para insertar 

    En la ClaCon este es el parámetro que recibe el método

    cmd.Parameters.AddWithValue("@idtipemp", cm.tipemp);

    Lo que quiero hacer es lo siguiente:

    tengo dos tablas, una empleado y tipo_empleado

    ejemplo empleado

    idemp [int]

    nomemp [varchar] (30)

    idtipemp [int]

    ejemplo tabla tipo_empleado

    idtipemp [int]

    tipo[varchar] (30)

    el fk es idtipoemp int que se encuentra en la tabla empleado

    y el pk es idtipemp int que se encuentra en la tabla tipo_empleado

    lo que busco con las sentencias antes expuestas en que a través del formulario pueda hacer el insert a la tabla empleado pero no me permite ya que ambos están con tipo de datos int y paso un string, esto lo entiendo claro no se puede, pero si alguien me puede dar un idea de como hacer el insert en la tabla empleado se los agradecería.

    cuando trato de pasar el dato a tipo de empleado que en tipo esta varchar y mando el string tengo problemas ya que la relacion es con int, pero necesito sea así para poder asignar los id a cada uno







    martes, 17 de abril de 2018 3:46

Todas las respuestas

  • la solución mas obvia es que en c# hagas un int.parse(tucampo) y pases un entero. Creo que existe también un int.tryparse() y puedes comprobar que no te produzca un error.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 17 de abril de 2018 6:22
    Moderador
  • creo que el problema lo tienes en: cm.tipemp = cbtipemp.SelectedItem.ToString();

    aquí estas pasando el valor del index del ComboBox. Prueba a poner

    cm.tipemp = cbtipemp.SelectedValue;

    Con el SelectedValue estas pasando el valor del campo.

    (cm.tipemp tiene que ser integer)

    • Editado rbs61 martes, 17 de abril de 2018 6:43
    martes, 17 de abril de 2018 6:41
  • Sigue presentando el mismo error, ya que el int de idtipemp es para relacionar la tabla empleado con tipo de empleado, pero lo que busco es a través de esa relación completar el campo tipo empleado que es varchar.
    martes, 17 de abril de 2018 12:03
  • Sigue presentando el mismo error el SelectValue para poder realizar la conversión debe terminar selectvaluet.tostring, ya que el int de idtipemp es para relacionar la tabla empleado con tipo de empleado, pero lo que busco es a través de esa relación completar el campo tipo empleado que es varchar.
    martes, 17 de abril de 2018 12:04
  • ¿podrías poner la definición de las tablas, para poder ver como están relacionadas?
    martes, 17 de abril de 2018 13:02
  • Saludos no puedo enviar imagenes porque soy nuevo en los foros, pero el están relacionadas de la siguiente forma

    tabla empleado ej.

    nomemp [varchar] (30)

    apeemp [varchar] (30)

    telemp [varchar] (10)

    idtipemp   [int]          este es el campo que me va a relacionar el tipo de empleado

    tabla tipo_empleado

    idtipemp [int]

    tipemp [varchar] (30)

    básicamente quiero que cuando haga el insert al empleado el campo de tipo empleado pase directo al campo varchar de la tabla tipo empleado mediante su relación. pero al enviar un string me dice que es tipo entero, y si envío un int no se guarda porque no recibe ya que es autoincrementado el campo id y lo quiero en el varchar de tipemp

    martes, 17 de abril de 2018 14:55
  • En una relación entre dos tablas, los tipos de los campos deben de tener el mismo tipo.

    Te pongo un ejemplo.

    idTratamiento es de tipo Int autoincrementable.

    idTractament es de tipo Int.

    Como veras la tabla de Tratamientos Especiales tiene un identificador único autoincrementable (idTractEsp) y otro campo Int  (idTractament) que es el que se relaciona con el identificador de la tabla de Tratamientos.

    En la tabla de tipos de empleados no puede ser varchar, tendrás que cambiarlo a Int.
    Para cambiar el tipo del campo puedes utilizar los siguiente:

    ALTER TABLE tipo_empleado ALTER COLUMN tipemp Int NULL ;  



    • Editado rbs61 miércoles, 18 de abril de 2018 7:04
    miércoles, 18 de abril de 2018 6:14