none
Capturar el Identity de la tabla maestra en dataset tipado. RRS feed

  • Pregunta

  • Hola Compañeros. Estoy terminando un pequeño proyecto con Visual Studio 2005(Vb.net) y Sql Express 2005.Ando trabajando con los dataset tipados que los genera el diseñador y tengo el siguiente problema, por ello pido su colaboracion.

    En un dataset tipado tengo una relacion maestro-detalle. Donde tengo dos datatable relacionados llamados

    Facturas y detalledefacturas. La tabla facturas tiene como clave principal un campo numero que es identity(auntoincremental) y este campo es clave foranea en la tabla detallefacturas. Lo que necesito es capturar el identyty que genero sql para poderlo colocar en las nuevas filas de la tabla detalledefactura que creo en en gridview.

    Agrego un nuevo maestro con esta instruccion:
    Tabla Facturas
      Me
    .TBLFACTURASBindingSource.AddNew()
    Pero no logro capturar el identity que deberia generar al crear el maestro.

    Muchas Gracias.


    Felipe Villa
    martes, 9 de junio de 2009 22:26

Todas las respuestas

  • hola,

    Dim nwindConn As SqlConnection = New SqlConnection("Data
    Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind")

    Dim catDA As SqlDataAdapter = New SqlDataAdapter("SELECT CategoryID,
    CategoryName FROM Categories", nwindConn)

    catDA.InsertCommand = New SqlCommand("InsertCategory", nwindConn)
    catDA.InsertCommand.CommandType = CommandType.StoredProcedure

    catDA.InsertCommand.Parameters.Add("@CategoryName" , SqlDbType.NChar, 15,
    "CategoryName")

    Dim myParm As SqlParameter = catDA.InsertCommand.Parameters.Add("@Identity",
    SqlDbType.Int, 0, "CategoryID")
    myParm.Direction = ParameterDirection.Output

    nwindConn.Open()

    Dim catDS As DataSet = New DataSet
    catDA.Fill(catDS, "Categories")

    Dim newRow As DataRow = catDS.Tables("Categories").NewRow()
    newRow("CategoryName") = "New Category"
    catDS.Tables("Categories").Rows.Add(newRow)

    catDA.Update(catDS, "Categories")

    nwindConn.Close()


    Comov eras en el ejemplo define en el command un parametro de tipo output, el cual debe mapear con el campo de id de tu dataset.

    En realidad en el ejemplo que encontre esta utilizando un select para realizar un update, en relidad la consulta deberia ser algo como esto:

    insert into Categories ( CategoryName) values (@ CategoryName )


    Este codigo lo encontre en el link: Retrieving Identity After Dataset update

    saludos
    Leandro Tuttini

    Work: Iceberg Solutions
    Blog
    Buenos Aires
    Argentina
    miércoles, 10 de junio de 2009 13:22