Registro Nuevo

17/10/2005 - 20:10 por Cesar Pérez mx | Informe spam
Hola alguien me puede ayudar el como insertar un nuevo registro y traer de
vuelta el autoincrementable de la base de datos que le asigno a este registro
y un solo proceso como el que se hacia en el ado anterior...

rs.open ("select ...")
rs.addnew()
rs!campo1 = var1
rs!campo2 = var2
rs.update
var3 = rs!CampoID

Gracias de antemano

Preguntas similare

Leer las respuestas

#1 Jesús López
17/10/2005 - 21:30 | Informe spam
Falta información para poder ayudarte.

¿Es una base de datos de SQL Server, de Access o de otro tipo?

¿La inserción la haces por medio de un DataSet y un DataAdapter o
directamente ejecutando un comando?

"Cesar Pérez mx" escribió en el
mensaje news:
Hola alguien me puede ayudar el como insertar un nuevo registro y traer de
vuelta el autoincrementable de la base de datos que le asigno a este
registro
y un solo proceso como el que se hacia en el ado anterior...

rs.open ("select ...")
rs.addnew()
rs!campo1 = var1
rs!campo2 = var2
rs.update
var3 = rs!CampoID

Gracias de antemano


Respuesta Responder a este mensaje
#2 Cesar Pérez mx
17/10/2005 - 21:44 | Informe spam
Gracias...

La base de datos estan en SQL 2000, las inserciones las he estado haciendo
desde un comando.. y depues preparo un dataset para traer el
autoincrementable de la base de datos... y la verdad no es 100% confiable que
me traiga el autoincrementable correcto a la insercion...

Creo yo que debe haber un metodo mas sencillo para hacerlo...

de antemano mil gracias



"Jesús López" escribió:

Falta información para poder ayudarte.

¿Es una base de datos de SQL Server, de Access o de otro tipo?

¿La inserción la haces por medio de un DataSet y un DataAdapter o
directamente ejecutando un comando?

"Cesar Pérez mx" escribió en el
mensaje news:
> Hola alguien me puede ayudar el como insertar un nuevo registro y traer de
> vuelta el autoincrementable de la base de datos que le asigno a este
> registro
> y un solo proceso como el que se hacia en el ado anterior...
>
> rs.open ("select ...")
> rs.addnew()
> rs!campo1 = var1
> rs!campo2 = var2
> rs.update
> var3 = rs!CampoID
>
> Gracias de antemano
>
>



Respuesta Responder a este mensaje
#3 Jesús López
17/10/2005 - 22:16 | Informe spam
No entiendo eso que dices de que preparas un DataSet para traer el
autonumérico ...

Usando un dataset y un dataadapter esta sería la forma:

(1)Añades registros al DataTable
(2)Llamas al método Update del SqlDataAdapter
(3)La columna autonumérica de los DataRows tendrán el valor autumérico
asignado por SQL Server.

Para que esto ocurra se tiene que dar alguna de las siguientes condiciones
en el InsertCommand del DataAdapter:

(1) El insert command tiene un parámetro de salida que está mapeado con la
columna autonumérica en el datatable:

Esto generalmente es así cuando usas procedimientos almacenados para
insertar los registros. Por ejemplo el siguiente procedimiento almacenado:

CREATE PROCEDURE [dbo].[spAñadirContacto]
@IdContacto int output,
@Nombre varchar(50),
@Dirección varchar(50),
@Tfno varchar(10)
AS
INSERT INTO Contactos(Nombre, Dirección, Tfno)
VALUES(@Nombre, @Dirección, @Tfno)
SET @IdContacto = SCOPE_IDENTITY()

Utiliza la función SCOPE_IDENTITY() para obtener el autonumérico y
asignárselo al parámetro de salida @IdContacto.

El parámtero @IdContacto del InsertCommand tendrá que estar mapeado con
la columna IdContacto del datatable:

ElDataAdapter.InsertCommand.Parameters("@IdContacto").SourceColumn =
"IdContacto"

Y deberá tener una dirección de salida (también valdría
entrada-salida):

ElDataAdapter.InsertCommand.Parameters("@IdContaco").Direcction =
ParameterDirection.Output

El InsertCommand del DataAdapter tendrá que tener la propiedad
UpdatedRowSource = OutputParameters o Both

ElDataAdapter.InsertCommand.UpdatedRowSource =
UpdateRowSource.OutputParameters

(2) El InsertCommand devuelve un registro con un campo del mismo nombre que
la columna autonumérica del datatable.

El insertCommand también puede ser un procedimiento almacenado, pero
cuando se usan procedimientos almacenados la primera opción es la
preferible.
En este caso estamos hablando de InsertCommands de la forma:

INSERT INTO Contactos(Nombre, Dirección, Tfno) VALUES (@Nombre,
@Dirección, @Tfno); SELECT SCOPE_IDENTITY() As IdContacto

Como ves el insertCommand tiene dos instrucciones SQL. Esto no es ningún
problema.

En este caso el InsertCommand del DataAdapter tendrá que tener la
propiedad UpdatedRowSource = FirstReturnedRecord o Both

Es recomendable que la columna autonumérica del datatable esté definida como
Autoincremento con un valor inicial de -1 e incrementos de -1 en -1, para
que no haya conflictos luego de insertar los registros en la base de datos y
para que quede claro que esos valores son provisionales


Si lo que haces es usar directamente un comando, incluye en ese comando
SELECT SCOPE_IDENTITY(). Por ejemplo:

cmd.CommandText = "INSERT INTO Contactos(Nombre, Dirección, Tfno) VALUES
(@Nombre, @Dirección, @Tfno); SELECT SCOPE_IDENTITY() As IdContacto"
cmd.Parameters.Add( etc, etc )
cmd.Parameters.Add( etc, etc )

IdContacto = cmd.ExecuteScalar()

También podrías usar un procedimiento almacenado como el de antes. En este
caso, establece el valor de los parámetros de entrada antes del ejecutar el
comando, y una vez ejecutado el comando, lees el parámetro de salida:

cmd.Parameters("@Nombre").Value = Nombre
etc
cmd.ExecuteNonQuery()
IdContacto = cmd.Parameters("@IdContacto").Value
etc


"Cesar Pérez mx" escribió en el
mensaje news:
Gracias...

La base de datos estan en SQL 2000, las inserciones las he estado haciendo
desde un comando.. y depues preparo un dataset para traer el
autoincrementable de la base de datos... y la verdad no es 100% confiable
que
me traiga el autoincrementable correcto a la insercion...

Creo yo que debe haber un metodo mas sencillo para hacerlo...

de antemano mil gracias



"Jesús López" escribió:

Falta información para poder ayudarte.

¿Es una base de datos de SQL Server, de Access o de otro tipo?

¿La inserción la haces por medio de un DataSet y un DataAdapter o
directamente ejecutando un comando?

"Cesar Pérez mx" escribió en el
mensaje news:
> Hola alguien me puede ayudar el como insertar un nuevo registro y traer
> de
> vuelta el autoincrementable de la base de datos que le asigno a este
> registro
> y un solo proceso como el que se hacia en el ado anterior...
>
> rs.open ("select ...")
> rs.addnew()
> rs!campo1 = var1
> rs!campo2 = var2
> rs.update
> var3 = rs!CampoID
>
> Gracias de antemano
>
>



Respuesta Responder a este mensaje
#4 Cesar Pérez mx
17/10/2005 - 23:35 | Informe spam
Muchas gracias... exactamente era esto lo que necesitaba saber...

"Jesús López" escribió:

No entiendo eso que dices de que preparas un DataSet para traer el
autonumérico ...

Usando un dataset y un dataadapter esta sería la forma:

(1)Añades registros al DataTable
(2)Llamas al método Update del SqlDataAdapter
(3)La columna autonumérica de los DataRows tendrán el valor autumérico
asignado por SQL Server.

Para que esto ocurra se tiene que dar alguna de las siguientes condiciones
en el InsertCommand del DataAdapter:

(1) El insert command tiene un parámetro de salida que está mapeado con la
columna autonumérica en el datatable:

Esto generalmente es así cuando usas procedimientos almacenados para
insertar los registros. Por ejemplo el siguiente procedimiento almacenado:

CREATE PROCEDURE [dbo].[spAñadirContacto]
@IdContacto int output,
@Nombre varchar(50),
@Dirección varchar(50),
@Tfno varchar(10)
AS
INSERT INTO Contactos(Nombre, Dirección, Tfno)
VALUES(@Nombre, @Dirección, @Tfno)
SET @IdContacto = SCOPE_IDENTITY()

Utiliza la función SCOPE_IDENTITY() para obtener el autonumérico y
asignárselo al parámetro de salida @IdContacto.

El parámtero @IdContacto del InsertCommand tendrá que estar mapeado con
la columna IdContacto del datatable:

ElDataAdapter.InsertCommand.Parameters("@IdContacto").SourceColumn =
"IdContacto"

Y deberá tener una dirección de salida (también valdría
entrada-salida):

ElDataAdapter.InsertCommand.Parameters("@IdContaco").Direcction =
ParameterDirection.Output

El InsertCommand del DataAdapter tendrá que tener la propiedad
UpdatedRowSource = OutputParameters o Both

ElDataAdapter.InsertCommand.UpdatedRowSource =
UpdateRowSource.OutputParameters

(2) El InsertCommand devuelve un registro con un campo del mismo nombre que
la columna autonumérica del datatable.

El insertCommand también puede ser un procedimiento almacenado, pero
cuando se usan procedimientos almacenados la primera opción es la
preferible.
En este caso estamos hablando de InsertCommands de la forma:

INSERT INTO Contactos(Nombre, Dirección, Tfno) VALUES (@Nombre,
@Dirección, @Tfno); SELECT SCOPE_IDENTITY() As IdContacto

Como ves el insertCommand tiene dos instrucciones SQL. Esto no es ningún
problema.

En este caso el InsertCommand del DataAdapter tendrá que tener la
propiedad UpdatedRowSource = FirstReturnedRecord o Both

Es recomendable que la columna autonumérica del datatable esté definida como
Autoincremento con un valor inicial de -1 e incrementos de -1 en -1, para
que no haya conflictos luego de insertar los registros en la base de datos y
para que quede claro que esos valores son provisionales


Si lo que haces es usar directamente un comando, incluye en ese comando
SELECT SCOPE_IDENTITY(). Por ejemplo:

cmd.CommandText = "INSERT INTO Contactos(Nombre, Dirección, Tfno) VALUES
(@Nombre, @Dirección, @Tfno); SELECT SCOPE_IDENTITY() As IdContacto"
cmd.Parameters.Add( etc, etc )
cmd.Parameters.Add( etc, etc )

IdContacto = cmd.ExecuteScalar()

También podrías usar un procedimiento almacenado como el de antes. En este
caso, establece el valor de los parámetros de entrada antes del ejecutar el
comando, y una vez ejecutado el comando, lees el parámetro de salida:

cmd.Parameters("@Nombre").Value = Nombre
etc
cmd.ExecuteNonQuery()
IdContacto = cmd.Parameters("@IdContacto").Value
etc


"Cesar Pérez mx" escribió en el
mensaje news:
> Gracias...
>
> La base de datos estan en SQL 2000, las inserciones las he estado haciendo
> desde un comando.. y depues preparo un dataset para traer el
> autoincrementable de la base de datos... y la verdad no es 100% confiable
> que
> me traiga el autoincrementable correcto a la insercion...
>
> Creo yo que debe haber un metodo mas sencillo para hacerlo...
>
> de antemano mil gracias
>
>
>
> "Jesús López" escribió:
>
>> Falta información para poder ayudarte.
>>
>> ¿Es una base de datos de SQL Server, de Access o de otro tipo?
>>
>> ¿La inserción la haces por medio de un DataSet y un DataAdapter o
>> directamente ejecutando un comando?
>>
>> "Cesar Pérez mx" escribió en el
>> mensaje news:
>> > Hola alguien me puede ayudar el como insertar un nuevo registro y traer
>> > de
>> > vuelta el autoincrementable de la base de datos que le asigno a este
>> > registro
>> > y un solo proceso como el que se hacia en el ado anterior...
>> >
>> > rs.open ("select ...")
>> > rs.addnew()
>> > rs!campo1 = var1
>> > rs!campo2 = var2
>> > rs.update
>> > var3 = rs!CampoID
>> >
>> > Gracias de antemano
>> >
>> >
>>
>>
>>



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