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

Recuperar ID de un Insert

Estas en el tema de Recuperar ID de un Insert en el foro de .NET en Foros del Web. Hola a todos Estoy haciendo un Insert a una Tabla pero neceisto recuperar el Id y lo que no quiero hacer otra consulta, como se ...
  #1 (permalink)  
Antiguo 16/01/2009, 05:43
Avatar de Ascariz  
Fecha de Ingreso: noviembre-2005
Mensajes: 403
Antigüedad: 18 años, 5 meses
Puntos: 0
Recuperar ID de un Insert

Hola a todos

Estoy haciendo un Insert a una Tabla pero neceisto recuperar el Id y lo que no quiero hacer otra consulta, como se puede hacer

'Creo Conexion a BBDD
cmd.CommandText = SqlInsert
cmd.Connection = con_ins
' declaro y inserto los valores
cmd.ExecuteNonQuery()
__________________
Desarrollador & Diseñador Web
Diseño de paginas web en Madrid
  #2 (permalink)  
Antiguo 16/01/2009, 06:30
 
Fecha de Ingreso: julio-2007
Mensajes: 19
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Recuperar ID de un Insert

Hola, Weno Lo mas Probable es que quieras Recuperar El ID generado por ese Insert. Si es Asi Hay muchas formas de hacerlo. Trabaja Con Una Transaccion Para Que se vea mejor, Aqui Te Deho Una Forma:
Código javascript:
Ver original
  1. ///.............
  2. using (SqlConnection connection = new SqlConnection(connectionString))
  3.     {
  4.         connection.Open();
  5.         SqlCommand command = connection.CreateCommand();
  6.         SqlTransaction transaction;
  7.         transaction = connection.BeginTransaction("Mi Trans");
  8.  
  9.         command.Connection = connection;
  10.         command.Transaction = transaction;
  11.  
  12.         try
  13.         {
  14.             //Haces el Insert a Tu Tabla
  15.             command.CommandText =
  16.                 "Insert miTabla(.....";
  17.             command.ExecuteNonQuery();
  18.             ///Luego Aqui Recuperas el Id Insertado
  19.             command.CommandText =
  20.                 "SELECT TOP 1 miTabla.Id from miTabla OrderBy miTabla.Id DESC";
  21.             string miId = command.ExecuteScalar().toString();
  22.             //Aqui Haces Lo q Desees con Tu "miID"
  23.            
  24.             transaction.Commit();
  25.            
  26.         }
  27.         catch (Exception ex)
  28.         {
  29.             try
  30.             {
  31.                 transaction.Rollback();
  32.             }
  33.             catch (Exception ex2)
  34.             {              
  35.             }
  36.         }
  37.         finally
  38.         {
  39.             connection.close();
  40.         }
  41.        
  42.     }
  43. ///..........

Weno y consigue Algun Buen Manual De "SQL" Que Te Ayude A programar Bien....
Bytes.
JHONPi.
  #3 (permalink)  
Antiguo 16/01/2009, 07:05
 
Fecha de Ingreso: octubre-2008
Mensajes: 21
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Recuperar ID de un Insert

Que tal Ascariz...

Buen otra forma de obtener el ultimo id generado es con @@IDENTITY que sirve precisamente para eso...

INSERT INTO....
SELECT @@IDENTITY AS 'Identity'

Saludos...
  #4 (permalink)  
Antiguo 16/01/2009, 08:47
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Recuperar ID de un Insert

como dice geko y usando un output parameter para recuperarlo
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 16/01/2009, 09:21
Avatar de Ascariz  
Fecha de Ingreso: noviembre-2005
Mensajes: 403
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Recuperar ID de un Insert

Hola a todos

Lo primero gracias a todos por contestas.

Lo estoy haciendo con Select @@identity

pero tengo un error me dice esto y no se por que es?

Error: Línea 1: sintaxis incorrecta cerca de '@idusuario'.

VB.NET
Código:
SqlInsert = "Exec InsertarCarrito (@idusuario, @fecha, @Hora, @estado, @precio, @fechafactura, @descuento, @portes, @total, @formadepago, @formadeEnvio, @numeroAbono, @fechaAbono, @descuentoAbono, @portesAbono, @totalAbono, @TipoDireccion)"
                cmd.CommandText = SqlInsert
                cmd.Connection = con_ins
                cmd.Parameters.Add("@idusuario", SqlDbType.Int)
                cmd.Parameters.Add("@fecha", SqlDbType.SmallDateTime)
                cmd.Parameters.Add("@Hora", SqlDbType.NVarChar, 50)
                cmd.Parameters.Add("@estado", SqlDbType.NVarChar, 255)
                cmd.Parameters.Add("@precio", SqlDbType.Float)
                cmd.Parameters.Add("@fechafactura", SqlDbType.DateTime)
                cmd.Parameters.Add("@descuento", SqlDbType.Int)
                cmd.Parameters.Add("@portes", SqlDbType.Float)
                cmd.Parameters.Add("@total", SqlDbType.Float)
                cmd.Parameters.Add("@formadepago", SqlDbType.NVarChar, 255)
                cmd.Parameters.Add("@formadeEnvio", SqlDbType.NVarChar, 50)
                cmd.Parameters.Add("@numeroAbono", SqlDbType.NVarChar, 255)
                cmd.Parameters.Add("@fechaAbono", SqlDbType.DateTime)
                cmd.Parameters.Add("@descuentoAbono", SqlDbType.Int)
                cmd.Parameters.Add("@portesAbono", SqlDbType.Float)
                cmd.Parameters.Add("@totalAbono", SqlDbType.Float)
                cmd.Parameters.Add("@TipoDireccion", SqlDbType.Int)

                cmd.Parameters("@idusuario").Value = idusuario
                cmd.Parameters("@fecha").Value = Fecha
                cmd.Parameters("@Hora").Value = Hora
                cmd.Parameters("@estado").Value = Estado
                cmd.Parameters("@precio").Value = Precio
                cmd.Parameters("@fechafactura").Value = DBNull.Value
                cmd.Parameters("@descuento").Value = Descuento
                cmd.Parameters("@portes").Value = Portes
                cmd.Parameters("@total").Value = Total
                cmd.Parameters("@formadepago").Value = Formadepago
                cmd.Parameters("@formadeEnvio").Value = FormadeEnvio
                cmd.Parameters("@numeroAbono").Value = DBNull.Value
                cmd.Parameters("@fechaAbono").Value = DBNull.Value
                cmd.Parameters("@descuentoAbono").Value = DBNull.Value
                cmd.Parameters("@portesAbono").Value = DBNull.Value
                cmd.Parameters("@totalAbono").Value = DBNull.Value
                If RTipoDireccion = "Si" Then
                    ' Nueva Direccion
                    cmd.Parameters("@TipoDireccion").Value = 1
                Else
                    ' La dirección del usuario.
                    cmd.Parameters("@TipoDireccion").Value = 0
                End If
                Dim Registro As String
                Registro = cmd.ExecuteScalar() ERROR AKI 
SQL SERVER PROCEDIMENTO

Código:
ALTER PROCEDURE [InsertarCarrito] 
	@idusuario int,
	@fecha datetime  = NULL,
	@Hora nvarchar(255)=NULL,
	@estado nvarchar(255)=NULL,
	@precio nvarchar(255)=NULL, 
	@fechafactura datetime  = NULL,
	@descuento nvarchar(255)=NULL,
	@portes nvarchar(255)=NULL,
	@total nvarchar(255)=NULL,
	@formadepago nvarchar(255)=NULL, 
	@formadeEnvio nvarchar(255)=NULL,
	@numeroAbono nvarchar(255)=NULL, 
	@fechaAbono datetime  = NULL, 
	@descuentoAbono nvarchar(255)=NULL, 
	@portesAbono nvarchar(255)=NULL, 
	@totalAbono nvarchar(255)=NULL,
	@TipoDireccion nvarchar(255)=NULL
AS
BEGIN
	SET NOCOUNT ON;
	INSERT INTO pedido (idusuario, fecha, Hora, estado, precio, fechafactura, descuento, portes, total, formadepago, formadeEnvio, numeroAbono, fechaAbono, descuentoAbono, portesAbono, totalAbono, TipoDireccion) 
	VALUES( @idusuario, @fecha, @Hora, @estado, @precio, @fechafactura, @descuento, @portes, @total, @formadepago, @formadeEnvio, @numeroAbono, @fechaAbono, @descuentoAbono, @portesAbono, @totalAbono, @TipoDireccion)
	Select @@identity as IdPedido
END
__________________
Desarrollador & Diseñador Web
Diseño de paginas web en Madrid
  #6 (permalink)  
Antiguo 17/01/2009, 19:01
 
Fecha de Ingreso: enero-2009
Mensajes: 3
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Recuperar ID de un Insert

Hola ascariz, el error se debe a un par de cositas, me explico:
1.- primero para usar @@identity solo se usa para tablas donde su llave primaria sea identity ejem:

create table tablaEjemplo (
codigo int identity (1.1)
, campo2 int

)

2.- cuando hagas un select en el identity (dentro del procedure) o retornas el mismo @@identity o le asignas el valor a una variable, como más te guste
ejem

CREATE PROCEDURE procedureEjmplo
@campo2
AS
declare valorDelIdentityGenerado as int
INSERT INTO tablaEjemplo values (@campo2)
set valorDelIdentityGenerado=@@IDENTITY
select valorDelIdentityGenerado

GO

saludos.
  #7 (permalink)  
Antiguo 18/01/2009, 19:18
Avatar de normandos  
Fecha de Ingreso: diciembre-2001
Mensajes: 216
Antigüedad: 22 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Recuperar ID de un Insert

Insert (todo lo que quieras)
Select max (id) from tabla?

Ahí al toque uno atrás del otro. A mi me funciona de 10.
__________________
"No importa lo que nos suceda sino cómo reaccionamos ante lo que nos sucede."

Presidente James E. Faust
  #8 (permalink)  
Antiguo 19/01/2009, 05:06
Avatar de Ascariz  
Fecha de Ingreso: noviembre-2005
Mensajes: 403
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Recuperar ID de un Insert

Gracias Vanglas y a Normandos

Para Vanglas

La tabla tienen clave primaria y cambiare lo del procedimiento.

Para Normandos

Una pregunta si te hacen dos inserter en menos de un segugundo, puede ser que te retorne el id del otro insert y no el que corresponde, no ?
__________________
Desarrollador & Diseñador Web
Diseño de paginas web en Madrid
  #9 (permalink)  
Antiguo 19/01/2009, 08:59
Avatar de nnarvaez  
Fecha de Ingreso: enero-2009
Ubicación: Chile, Santiago
Mensajes: 19
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Recuperar ID de un Insert

Ascariz,

debez programar para que sólo se haga de una vez todo y no haya concurrencia.

En la siguiente página puedes ver los distintos niveles de "Isolation" con los cuales puedes acceder a la BD.

http://msdn.microsoft.com/es-es/library/system.data.isolationlevel(VS.80).aspx

Saludos,

Última edición por nnarvaez; 19/01/2009 a las 10:06
  #10 (permalink)  
Antiguo 19/01/2009, 16:20
Avatar de normandos  
Fecha de Ingreso: diciembre-2001
Mensajes: 216
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: Recuperar ID de un Insert

Si haces dos inserts seguidos y suponiendo que los dos son a la misma tabla debes poner la sentencia select en medio. Ej:

Insert (lo que quieras en Tabla)
Select max (id) from Tabla
Insert (otras cosas en Tabla)

Si los inserts son en tablas separadas no importa ya que generaran inserts diferentes, por lo que podrias hacer:
Insert (cosas en Tabla1)
Insert (cosas en Tabla2)
Select max (id) from Tabla1
Select max (id) from Tabla2

Saludos
__________________
"No importa lo que nos suceda sino cómo reaccionamos ante lo que nos sucede."

Presidente James E. Faust
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 20:01.