Mensaje dentro de Foro VB.NET

Responder 
#1 - 22/10/2011 20:19:52 Reporta abuso | Link Permanente
yevi_17
Usuario no registrado
Ayuda URGENTE ASP.NET 2010 con SQL Server 2008, como capturar un valor de tabla Identity y pasarlo o registrarlo en otra Tabla detalle

Responder Citar
buenas con todos, necesito ayuda sobre como hacer un registro cabesera detalle, tengo datos que ingreso de una resolucion y a la vez tengo un gridview al que cargo datos del  personal a quien va dirigida la resolucion que pueden ser mas de uno, con solo un boton quiero registrar los datos de la resolucion en mi Tabla Resolucion y en mi tabla detalle que se registre el ID de Resolucion y el ID del Personal a quien va dirigido, quiero capturar el IdResolucion que se autogenera al hacer el registro y a la vez que ese IDResolucion se registre en mi tabla Detalle para que tenga relacion de Resolucion con detalle algo asi como el Carrito de Compras, aqui les muestro mi codigo que no realiza lo que espero, Porfavor alguien podria corregir algo en el codigo que si me registra pero en mi tabla detalle no jala el mismo IDResolucion que se crea en la Tabla Resolucion y no hay relacion entre Resolucion y Personal, siempre me registra en el detalle el numero 2 para el IDResolucion

Aqui mi codigo:

esto inserta la resolucion:

 Public Function InsertarCabecera(ByVal nro_resolucion As Integer, ByVal rdr_resolucion As Int32, ByVal fecha_formulacion_resolucion As String, ByVal fecha_registro_resolucion As String, ByVal asunto_resolucion As String, ByVal nro_proyecto As Int32) As Int32



        Dim cn As New SqlConnection

        cn = conectar()



        Dim sp As String

       

        sp = ("sp_ins_ResolucionCabecera")



        Dim cmd As New SqlCommand(sp, cn)

        cmd.CommandType = CommandType.StoredProcedure 'especificamos el tipo de operacion q se va a realizar en la fuente d datos

        With cmd.Parameters





            .Add("@nro_resolucion", SqlDbType.Int).Value = nro_resolucion

            .Add("@rdr_resolucion", SqlDbType.Int).Value = rdr_resolucion

            .Add("@fecha_formulacion_resolucion", SqlDbType.VarChar).Value = fecha_formulacion_resolucion

            .Add("@fecha_registro_resolucion ", SqlDbType.VarChar).Value = fecha_registro_resolucion

            .Add("@asunto_resolucion", SqlDbType.VarChar).Value = asunto_resolucion

            .Add("@nro_proyecto", SqlDbType.Int).Value = nro_proyecto

            .Add("@unico", SqlDbType.Int).Value = ParameterDirection.Output







        End With



        cn.Open()

        Dim n As Int32

        'executeNonquery no devuelve datos, retorna la cantidad de filas afectadas

        Try

            n = cmd.ExecuteNonQuery()

            n = cmd.Parameters("@unico").Value

        Catch ex As Exception

            MsgBox(ex.Message)

            n = 0

        End Try

        cn.Close()

        Return n



    End Function

***************************************************

funcion para el detalleResolucion:

Public Function AgregarDetalle(ByVal codigo_resolucion As Integer, ByVal dni_persona As Integer, ByVal fecha_registro As String) As Integer



        Dim cn As New SqlConnection

        cn = conectar()



        Dim cmd As New SqlCommand("sp_ins_DetalleResolucion", cn)

        cmd.CommandType = CommandType.StoredProcedure 'especificamos el tipo de operacion q se va a realizar en la fuente d datos

        With cmd.Parameters

            

            .Add("@codigo_resolucion", SqlDbType.Int).Value = codigo_resolucion

            .Add("@dni_persona", SqlDbType.Int).Value = dni_persona

            .Add("@fecha_registro", SqlDbType.VarChar).Value = fecha_registro



        End With



        cn.Open()

        Dim n As Int32

        

        Try

            n = cmd.ExecuteNonQuery()

            'n = cmd.Parameters("@unico").Value

        Catch ex As Exception

            MsgBox(ex.ToString)

            n = 0

        End Try

        cn.Close()

        Return n



    End Function

*******************************************************************

Aqui les dejos los procedimientos que estoy utilizando:




para registro Resolucion:

insert proc [dbo].[sp_ins_ResolucionCabecera]

 @unico int OUTput, @nro_resolucion  int, @rdr_resolucion int, @fecha_formulacion_resolucion varchar(50),@fecha_registro_resolucion varchar(50),@asunto_resolucion varchar(80), @nro_proyecto int

as 

insert into Resoluciones ( nro_resolucion,rdr_resolucion,fecha_formulacion_resolucion,fecha_registro_resolucion, asunto_resolucion, nro_proyecto)

 VALUES(@nro_resolucion,@rdr_resolucion,@fecha_formulacion_resolucion,@fecha_registro_resolucion, @asunto_resolucion, @nro_proyecto)

 select @unico=@@IDENTITY

 return


///////parra el Detalle/////

 insert proc [dbo].[sp_ins_DetalleResolucion]

 @codigo_resolucion int, @dni_persona int, @fecha_registro varchar(50) 

as 

insert into Detalle_resoluciones ( codigo_resolucion, dni_persona,fecha_registro)

 VALUES(@codigo_resolucion, @dni_persona, @fecha_registro)

 return


////////////////////////////EVENTO EN EL BOTON REGISTRAR///////////////////////


  Protected Sub btnguardar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnguardar.Click



        Dim unico As Integer



        unico = oResolucion.InsertarCabecera(Val(txtnroresolucion.Text), Val(txtnrordr.Text), txtfecharesolucion.Text, txtfecharegistro.Text, txtasunto.Text, Val(txtproyecto.Text))





        'grabar detalle



        Dim dt As DataTable



        dt = Session("Personal")



        For n = 0 To dt.Rows.Count - 1



            oResolucion.AgregarDetalle(unico, dt.Rows(n)("dni_persona"), dt.Rows(n)("fecha_registro_resolucion"))



        Next



        MsgBox("Resolucion Registrada=" & unico)

        dt.Clear() 'limpia el carrito

        Session("Personal") = dt ' actualiza la session



Volver arriba