Foros del Web » Programación para mayores de 30 ;) » .NET »

Como obtener un nuevo id acabado de guardar en DB

Estas en el tema de Como obtener un nuevo id acabado de guardar en DB en el foro de .NET en Foros del Web. Hola a to2, tengo un datagrid donde puedo editar/borrar/añadir items desde la misma página. Es decir cuando yo le doy al botón nuevo me aparecen ...
  #1 (permalink)  
Antiguo 10/07/2006, 09:07
 
Fecha de Ingreso: septiembre-2003
Mensajes: 341
Antigüedad: 20 años, 7 meses
Puntos: 0
Como obtener un nuevo id acabado de guardar en DB

Hola a to2,
tengo un datagrid donde puedo editar/borrar/añadir items desde la misma página.
Es decir cuando yo le doy al botón nuevo me aparecen los campos necesarios en la tabla para insertar
Cuando le doy al boton "Añadir" llamo a la función escrita bajo.
Lo que quiero es guardar en la tabla submenu y luego de guardar en dicha tabla quiero obtener el nuevo idSubMenu para guardar en la
tabla Menu_Submenu la nueva relación
Mi problema es que no sé como obtener el idSubMenu nuevo.

He realizado lo siguiente pero obtengo el siguiente error :
System.Data.OleDb.OleDbException: No se han especificado valores para algunos de los parámetros requeridos
Aquí os dejo la función y he marcado donde me da el error

Código:
 
Sub dg_Add(Sender As Object, E As EventArgs)
      Dim srtNombreSubMenu as String= Request.Form("srtNombreSubMenu")
      Dim strDescrip as String = Request.Form("strDescrip")
      Dim strLink as String = Request.Form("strLink")
      Dim strTarget as String = Request.Form("strTarget")
      Dim objConnection As OleDbConnection
      Dim objCommand As OleDbCommand
      Dim strSQLQuery As String
      Dim conexiondb as string
      Dim TheidSubMenu as integer
      Dim storeGrid as datagrid
      conexiondb = ConfigurationSettings.AppSettings("strConnect")
      objConnection = New OleDbConnection(conexiondb)
      ' Inserto en DB
   strSQLQuery = "insert into submenu (NombreSubmenu,DescripSubmenu,link,target) values ('"& srtNombreSubMenu &"', '"& strDescrip &"', '"& strLink &"', '"& strTarget &"')"
      objCommand = New OleDbCommand(strSQLQuery, objConnection)
      objConnection.Open()
      objCommand.ExecuteNonQuery()
      objConnection.close()
      BindData()
      ''''''''''''''''''' HASTA AQUI ME FUNCIONA CORRECTAMENTE''''''''''''''''''''''''''''''
   'obtener el nuevo idSubmenu
       strSQLQuery = "select idsubmenu from submenu order by submenu desc"
       objConnection.Open()
       objCommand = New OleDbCommand(strSQLQuery, objConnection) 
       '3. Create the DataReader
        Dim objDR as OleDbDataReader
       objDR = objCommand.ExecuteReader() <--- AQUI ME DA ERROR
        objDR.Read()
        TheidSubMenu = objDR.GetString(0)
       objConnection.Close()
End Sub
__________________
---Nuestra recompensa se encuentra en el esfuerzo y no en el resultado. Un esfuerzo total es una victoria completa.-- GHANDI
  #2 (permalink)  
Antiguo 10/07/2006, 09:25
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 20 años, 7 meses
Puntos: 156
Si quieres obtener sólo una cifra, en vez del datareader, haz el executescalar.


Cita:
dim ultimo as integer = objCommand.executescalar

saludos!
  #3 (permalink)  
Antiguo 10/07/2006, 09:48
 
Fecha de Ingreso: septiembre-2003
Mensajes: 341
Antigüedad: 20 años, 7 meses
Puntos: 0
gracias freegirl por tu contestación
lo he probado dejandolo así

'obtener el nuevo idSubmenu
strSQLQuery = "select idsubmenu from submenu order by submenu desc"
objConnection.Open()
objCommand = New OleDbCommand(strSQLQuery, objConnection)
dim ultimo as integer = objCommand.executescalar()


pero me vuelve a decir lo mismo:
System.Data.OleDb.OleDbException: No se han especificado valores para algunos de los parámetros requeridos

esta vez me marca la linea :
objCommand.executescalar()

Que estoy haciendo mal? Ante no lo he puesto pero utilizo una BD Access
__________________
---Nuestra recompensa se encuentra en el esfuerzo y no en el resultado. Un esfuerzo total es una victoria completa.-- GHANDI
  #4 (permalink)  
Antiguo 10/07/2006, 09:59
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 20 años, 7 meses
Puntos: 156
hola,

fíjate que el nombre del campo y de la tabla esté escrito correctamente..

Otra cosa, si quieres coger el último número introducido, y idSubmenu es un campo autonumérico, haz:
Cita:
"select max(idsubmenu) from submenu"
De esta forma obtienes el numero mayor, que correspondería al último registro que introduciste. Ya que de la otra forma que lo haces tu, listas todos los registros.


saludos!
  #5 (permalink)  
Antiguo 10/07/2006, 10:18
 
Fecha de Ingreso: septiembre-2003
Mensajes: 341
Antigüedad: 20 años, 7 meses
Puntos: 0
Muchas gracias ahora si que me ha funcionado...

entonces antes no me funcionaba pq la consulta me devolvia mas de un registro?
__________________
---Nuestra recompensa se encuentra en el esfuerzo y no en el resultado. Un esfuerzo total es una victoria completa.-- GHANDI
  #6 (permalink)  
Antiguo 11/07/2006, 04:41
Avatar de freegirl
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: Catalonia
Mensajes: 4.334
Antigüedad: 20 años, 7 meses
Puntos: 156
la otra consulta tampoco era para que te diera error...sólo que te hubiera sacado el último número que hubieras listado. Te dije la consulta del MAX porque, desde mi punto de vista, para sacar el último número es más correcta, y era innecesario listar todos los registr.


saludos!
  #7 (permalink)  
Antiguo 12/07/2006, 13:00
 
Fecha de Ingreso: septiembre-2005
Ubicación: Tijuana México
Mensajes: 76
Antigüedad: 18 años, 7 meses
Puntos: 0
Debes se usar el executescalar para que te de el identity que hallas introducido, esto funciona si tienes un campo numerico de folio de la transaccion que se va incrementando automaticamente.

Ejemplo:
object valorInsertado = null;

sqlCmd.CommandText = "INSERT INTO TABLA (CAMPOS DE LA TABLA) VALUES (VALORES A INSERTAR)";

sqlCmd.ExecuteNonQuery();

sqlCmd.CommandText = "SELECT @@IDENTITY AS valorInsertado";
valorInsertado = sqlCmd.ExecuteScalar();
__________________
:si:
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:31.