ExecuteScalar

23/10/2004 - 00:57 por Oscar | Informe spam
Hola a todos,

Tengo un problemilla: Estoy haciendo un Insert into a una tabla que tiene un campo id autonumérico,
y luego tengo que añadir datos a otra tabla y utilizar el último autonumérico que haya generado el
insert into, algo así como,

"Insert into clientes bla bla..."
(me genera un nuevo id)

"insert into otra tabla donde tengo que poner el id recién generado"

La pregunta: Ahora, para salir del paso estoy haciendo lo siguiente:

1 primer insert into, y luego

2 sql="Select Last(Id) From Clientes"
cm.CommandText = sql
id_añadido = cm.ExecuteScalar

3 y una vez que tengo el id_añadido inmediatamente hago el insert into en la otra tabla

Pero claro, me arriesgo a que haya otro usuario desde otro pc se quede con los datos de la segunda
tabla en un registro que él haya añadido entre los pasos 1 y 2.

Con ExecuteScalar, o algo similar, no podría obtener el id generado por la primera insert into
directamente?

Gracias por todo,
Saludos. Oscar

Preguntas similare

Leer las respuestas

#6 Oscar
23/10/2004 - 04:08 | Informe spam
Gracias!

"Leonardo Azpurua" <l e o n a r d o (arroba) m v p s (punto) o r g> escribió en el mensaje
news:

"Oscar" <veletapgARROBAwanadooPUNTOcom> escribió en el mensaje
news:u5%
> Gracias Leo, pero no estamos en las mismas? Si antes de ejecutar la
> consulta SELECT @@IDENTITY otro
> usuario ya ha conseguido añadir otro registro, me devolverá el id del
> registro que ha añadido ese
> usuario, y no el que añadí yo, no?
>
> Salduos,
> Oscar

No. @@IDENTITY "devuelve el último valor de identidad generado en cualquier
tabla en la sesión actual".

La sesión actual es la que abriste al crear la conexión. La unica
precacución que debes tener es utilizar el mismo objeto sqlCommand que
usaste para emitir la sentencia de inserción, pero eso es natural:

cmd.CommandText = "INSERT INTO "
cmd.ExecuteNonQuery
cmd.CommandText = "SELECT @@IDENTITY"
Dim id As Int64 = cmd.ExecuteScalar

e id es el valor de la columna con el atributo Identity de la fila recien
insertada.

Salud!

Leonardo
mvp vb



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida