none
sp con parametro ID en null RRS feed

  • Pregunta

  • Hola amigo: tengo un sp donde su parametro ID = NULL (clave principal) para poder registrar nuevos registros y le he puesto un else al sp para que cuando el ID tenga datos me modifique en vez de agregar un nuevo registro; pero en mi codigo vb.net en tres capas no puedo realizar la ejecucion.

    If texbox.text = "" then

    dts.gId = texbox.text ---- aqui quiero poner el DBnull para que cuando este vacio se agregue un nuevo registro

    else

    dts.gId = texbox.text --- aqui es cuando eñ texbox contiene dato por lo tanto modigica el registro segun su ID.

    End If

    agrageceria si alguien me ayuda

    • Cambiado Enrique M. Montejo sábado, 20 de septiembre de 2014 10:32 Pregunta relacionada con el acceso a datos con SQL Server.
    lunes, 15 de septiembre de 2014 15:25

Todas las respuestas

  • Espero que esto te sirva:

    En VB

    Dim clave As Decimal
            clave = IIf(Me.TextBox1.Text = "", 0, Decimal.Parse(Me.TextBox1.Text))

    En el SQL

    CREATE PROCEDURE sp_Nombre
    	(
    		@ID NUMERIC
    	)
    AS
    BEGIN
    	SET NOCOUNT ON;
    	IF @ID > 0
    		-- PROCESO PARA UPDATE
    	ELSE
    		-- PROCESO PARA INSERT
    END
    GO

    En vez de enviarle null al sp enviale un valor; si tu primary key es identity simplemente dile que si es mayor a cero haga update, sino un insert


    Vladimir Miranda Desarrollador Jr.

    • Propuesto como respuesta javyjaja lunes, 15 de septiembre de 2014 18:27
    lunes, 15 de septiembre de 2014 15:58
  • Hola amigos, gracias por responder pero sigo sin poder resolver mi problema, observen aqui les dejo mi codigo:

    en el sp de la base de datos sql server:

         

    ALTER proc [dbo].[InsUpd_Conservacion]

    @Id int = NULL,
    @Nombre varchar(100)
    as
    BEGIN 

     IF @Id IS NULL -- INSERTAR NUEVA INFORMACION DEL REGISTRO...
     BEGIN   
        INSERT INTO Conservacion(Nombre)
    values (@Nombre)

     END
     ELSE -- MODIFICAR LA INFORMACION DEL REGISTRO...
     BEGIN
        update Conservacion set Nombre=@Nombre
    where Id=@Id
      END 
      END

    en la capa de Datos del vb:

    Public Function InsertarConservacion(ByVal dts As vConservacion) As Boolean
            Try
                conectado()
                cmd = New SqlCommand("InsUpd_Conservacion")
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Connection = cnn

                cmd.Parameters.AddWithValue("@Id", dts.gId)
                cmd.Parameters.AddWithValue("@Nombre", dts.gNombre)

                If cmd.ExecuteNonQuery Then
                    Return True
                Else
                    Return False
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
                Return False
            Finally
                desconectado()
            End Try
        End Function

    y en la capa presentacion del from asi:

     Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
            Try
                Dim dts As New vConservacion
                Dim func As New fConservacion

                If TextBox1.Text <> 0 Then
                    dts.gId = TextBox1.Text
                Else
                    dts.gId = DBNull.Value
                End If
                dts.gNombre = TextBox2.Text

                If func.InsertarConservacion(dts) Then
                    MessageBox.Show("Registrado Correctamente", "Guardando Registros", MessageBoxButtons.OK, MessageBoxIcon.Information)

                    Me.Close()
                Else
                    MessageBox.Show("Error al Registrar", "Guardando Registros", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Me.Close()
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try

        End Sub

    segun mi codigo me aparece el error cuando ingreso un nuevo registro: la conversion de la cadena"" es de tipo double no es valida.....

    ayuda porfavor gracias.

    martes, 16 de septiembre de 2014 14:16
  • El problema solo es en la capa de presentación y en el SQL;

    Asi quedaria la de presentación:

     Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
            Try
                Dim dts As New vConservacion
                Dim func As New fConservacion
    
                If TextBox1.Text <> 0 Then
                    dts.gId = TextBox1.Text
                Else
                    dts.gId = 0
                End If
                dts.gNombre = TextBox2.Text
    
                If func.InsertarConservacion(dts) Then
                    MessageBox.Show("Registrado Correctamente", "Guardando Registros", MessageBoxButtons.OK, MessageBoxIcon.Information)
    
                    Me.Close()
                Else
                    MessageBox.Show("Error al Registrar", "Guardando Registros", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Me.Close()
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
    
        End Sub

    O tambien prueba asi

    Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
             Try
                Dim dts As New vConservacion
                Dim func As New fConservacion
                Dim mensaje As String
    
                IIf(TextBox1.Text <> 0, dts.gId = TextBox1.Text, dts.gId = 0)
                dts.gNombre = TextBox2.Text
    
                If func.InsertarConservacion(dts) Then
                    mensaje = "Registrado Correctamente"
                Else
                    mensaje = "Error al Registrar"
                End If
                MessageBox.Show(mensaje, "Guardando Registros", MessageBoxButtons.OK)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            Finally
                Me.Close()
            End Try
    
        End Sub

    Y asi quedaria en el SQL

    ALTER proc [dbo].[InsUpd_Conservacion]
    
    @Id int,
    @Nombre varchar(100)
    as
    BEGIN 
    IF @Id > 0 -- MODIFICAR EL REGISTRO
    	BEGIN
    		update Conservacion set Nombre=@Nombre where Id=@Id
    	END
    ELSE  -- INSERTAR INFORMACION NUEVA DEL REGISTRO
    	BEGIN
    		INSERT INTO Conservacion(Nombre) values (@Nombre)
    	END 
    END


    Espero que te sirva


    Vladimir Miranda Desarrollador Jr.



    • Editado Vladimir MIranda miércoles, 17 de septiembre de 2014 20:01 MAL CODIFICADO
    miércoles, 17 de septiembre de 2014 19:51
  • Estimado amigo me sigue apareciendo el error, segui tus pasos al pie de la letra pero no funciono, me sale el error: la conversion de la cadena "" en el tipo Double no es valida.
    jueves, 18 de septiembre de 2014 1:54
  • Cambiaste tambien el sp? Mira que le di la vuelta a tu sp para que te funciones; no le mandes el valor "" sino mas bien un 0; verifica tu sp tambien

    Vladimir Miranda Desarrollador Jr.

    jueves, 18 de septiembre de 2014 15:15