none
Implementar un procedimiento almacenado RRS feed

  • Pregunta

  • Hola amigos: tengo el siguiente codigo:

    ALTER   PROCEDURE [dbo].[sp_InsUpd_tbl_RelacionDeParentesco]
     @ID_RelacionDeParentesco int = NULL,
     @str_RelacionDeParentesco varchar(30),
     @lng_CodigoGenerado int = NULL OUTPUT
    AS
    BEGIN 
      IF @ID_RelacionDeParentesco IS NULL
     BEGIN   
            INSERT INTO tbl_RelacionDeParentesco(str_RelacionDeParentesco) VALUES(@str_RelacionDeParentesco)
            SET @lng_CodigoGenerado = IDENT_CURRENT('tbl_RelacionDeParentesco')
         END
     ELSE -- MODIFICAR LA INFORMACION DEL REGISTRO...
     BEGIN
            UPDATE tbl_RelacionDeParentesco SET

        str_RelacionDeParentesco = @str_RelacionDeParentesco
        WHERE ID_RelacionDeParentesco = @ID_RelacionDeParentesco
     END

    como puedo hacer el codigo vb para poder insertar datos cuando su ID es null y modificar cuando el ID tiene dato, por ejemplo tengo el siguiente codigo:

    Try
                conectar()
                Dim cm As New SqlCommand("sp_InsUpd_tbl_RelacionDeParentesco", CON)
                cm.CommandType = CommandType.StoredProcedure
                'cm.Parameters.Add("@ID_CastigoDeVisita", SqlDbType.DateTime).Value = MantenimientoDiarioDeVisitas.TextBox2.Text
               cm.Parameters.Add("@ID_RelacionDeParentesco", SqlDbType.Int).Value = txtIDvisita.Text
                cm.Parameters.Add("str_RelacionDeParentesco", SqlDbType.DateTime).Value = txt.text
               ......
                Dim ParamTotal As New SqlParameter("@lng_CodigoGenerado", SqlDbType.Int)
                ParamTotal.Direction = ParameterDirection.Output
                cm.Parameters.Add(ParamTotal)
                cm.ExecuteScalar()
                MessageBox.Show("Datos Guardados Correctamente")
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try

    en la linea con negrita, ahi es donde no se como lograrlo, porque solo puedo registrar uno nuevo, pero cuando intento utilizar el mismo codigo para modificar, no se puede. alguien me puede ayudar porfavor. me sale el error: "falta el parametro ID que el sp necesita para ejecutar"


    • Editado Anabelen RD sábado, 6 de septiembre de 2014 22:24
    • Cambiado Enrique M. Montejo martes, 9 de septiembre de 2014 7:44 Pregunta relacionada con objetos de ADO .NET
    sábado, 6 de septiembre de 2014 20:33

Todas las respuestas

  • Hola:

    Dos cosas:

    1) Me parece 'raro' que en el procedimiento almacenado tengas parámetros por defecto para el 1er y 3er parámetro pero no para el segundo. Yo pondría:

    @str_RelacionDeParentesco varchar(30) = NULL,

    2) Comprueba también los parámetros, sobretodo el segundo (otra vez):

                cm.Parameters.Add("str_RelacionDeParentesco", SqlDbType.DateTime).Value = txt.text

    No le has puesto el carácter @, y el tipo es 'DateTime' ¿?

    Saludos

    • Propuesto como respuesta LG DES miércoles, 22 de octubre de 2014 10:28
    miércoles, 10 de septiembre de 2014 7:56
  • Gracias amigo LG DES por responder, las correcciones que me sugieres ya estan corregidos; mi pregunta es como hago en mi codigo de formulario pasar el ID que tengo en mi texbox (contiene dato) para ejecutar el sp y en vez de insertar un nuevo registro solo modifique; porque yo cuando pincho el boton modificar se ejecuta el sp ingresando un nuevo registro; por otro lado cuando el texbox ID no tenga dato se inserte un nuevo registro cuando pinche el boton guardar nuevo ejecutando el mismo sp, porque si observar tiene la condicion IF el sp. te agradesco tu apoyo.
    jueves, 11 de septiembre de 2014 10:48
  • >>como puedo hacer el codigo vb para poder insertar datos cuando su ID es null y modificar cuando el ID tiene dato

    podrias usar

    if(txtIDvisita.Text == "")
        cm.Parameters.Add("@ID_RelacionDeParentesco", SqlDbType.Int).Value = txtIDvisita.Text
    else 
       cm.Parameters.Add("@ID_RelacionDeParentesco", SqlDbType.Int).Value = DbNull.Value;
    


    o sea sino hay datos asignas un null

    tambien se puede realizar en una sola linea con el uso de la estructura  condicion ? true : false

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 11 de septiembre de 2014 11:11