locked
Ayuda URGENTE ASP.NET 2010 con SQL Server 2008, como capturar un valor de tabla Identity y pasarlo o registrarlo en otra Tabla detalle RRS feed

  • Question

  • 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

     

    • Moved by Hengzhe Li Sunday, October 23, 2011 8:47 AM off topic (From:MSDN, TechNet, and Expression Profile and Recognition System Discussions)
    Saturday, October 22, 2011 6:04 PM

Answers