ayuda urgente

03/03/2006 - 06:50 por Pragma | Informe spam
tengo que registrar transaccionalmente una venta
de manera abstracta una cabecera de de venta y varios detalles de venta y lo
quiero hacer usando procedimientos almacenados, pero mi problema es saber
como mando todos los detalles de venta puesto que el numero de detalles no
se saben de antemanos, porque en el caso de la cabecera de venta pues si la
cabecera tiene 5 datos puede necesito 5 parametros en el procedimiento pero
en el caso del procedimiento no se como hacerle

gracias

Preguntas similare

Leer las respuestas

#1 Miguel Angel Campos
03/03/2006 - 13:07 | Informe spam
Puedes crear un procedimiento almacenado para almacenar los datos de la
cabecera de la venta, y posteriormente un procedimiento almacenado que
guarde los datos de una sola línea.
El primer procedimiento la llamarías una sola vez, y el segundo
procedimiento lo llamarais tantas veces como líneas tengas.
Como bien has indicado todo este proceso se debe realizar dentro de una
transacción para evitar que la información se almacene de forma incompleta.

Un Saludo,

Miguel Angel Campos
MCSD.NET

"Pragma" escribió en el mensaje
news:
tengo que registrar transaccionalmente una venta
de manera abstracta una cabecera de de venta y varios detalles de venta y
lo quiero hacer usando procedimientos almacenados, pero mi problema es
saber como mando todos los detalles de venta puesto que el numero de
detalles no se saben de antemanos, porque en el caso de la cabecera de
venta pues si la cabecera tiene 5 datos puede necesito 5 parametros en el
procedimiento pero en el caso del procedimiento no se como hacerle

gracias



Respuesta Responder a este mensaje
#2 Eduardo A. Morcillo [MS MVP VB]
03/03/2006 - 15:47 | Informe spam
Si usas SQL Server otra forma de hacerlo es pasar los detalles como un XML y
usar OPENXML en el procedimiento almacenado para leer el xml como si fuera
una tabla.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#3 Pragma
03/03/2006 - 16:57 | Informe spam
ah si eso es lo que decia pero me refiero a como llamarlo desde el lenguaje,
partiendo de lo siguiente:

- la transaccion no deberia iniciarse desde el lenguaje, sino desde el
gestor

es asi la unica manera que se me ocurre es que antes de empezar a grabar el
detalle ejecutar un comando que llama a un SP que solo inicie una
transaccion y ejecutar ese comando (ExecuteNonQuery)
despues grabar la cabecera (otro executeNonQuery)
y luego grabar todos los detalles (otro ExecuteNonQuery)
y luego llamar a otro SP que hace un Commit a la transaccion

pero no es un proceso que se vea bien se ve mal de hecho por eso busco una
alternativa

salu2!





"Miguel Angel Campos" <SPAMmacampos ARRUBA .idesarrollaSPAM.com> escribió en
el mensaje news:
Puedes crear un procedimiento almacenado para almacenar los datos de la
cabecera de la venta, y posteriormente un procedimiento almacenado que
guarde los datos de una sola línea.
El primer procedimiento la llamarías una sola vez, y el segundo
procedimiento lo llamarais tantas veces como líneas tengas.
Como bien has indicado todo este proceso se debe realizar dentro de una
transacción para evitar que la información se almacene de forma
incompleta.

Un Saludo,

Miguel Angel Campos
MCSD.NET

"Pragma" escribió en el mensaje
news:
tengo que registrar transaccionalmente una venta
de manera abstracta una cabecera de de venta y varios detalles de venta y
lo quiero hacer usando procedimientos almacenados, pero mi problema es
saber como mando todos los detalles de venta puesto que el numero de
detalles no se saben de antemanos, porque en el caso de la cabecera de
venta pues si la cabecera tiene 5 datos puede necesito 5 parametros en el
procedimiento pero en el caso del procedimiento no se como hacerle

gracias







Respuesta Responder a este mensaje
#4 Miguel Angel Campos
06/03/2006 - 08:53 | Informe spam
Esa opción que describes no es viable por que cualquier transacción que
inices en un procedimiento almacenado debe terminar en el ambito de dicho
procedimiento, no tiene sentido crear un procedimiento para hacer un BEGIN
TRANS y despues otros dos para el COMMIT o el ROLLBACK.

Que opciones tienes:
- Si estás en .Net 2.0 puedes utilizar la clase
System.Transaction.TransactionScope. Esta clase que permite definir un
contexto de transacción que es soportado directamente por las clases de
System.Data.SqlClient, con lo cual estarias dentro de una transaccion.
- Puedes iniciar una transacción en el objeto SqlConnection que estes
utilizando, y propagar si uso a lo largo de todas las llamada a la base de
datos. Te recomiendo Data Access Application Block
(http://msdn.microsoft.com/library/d...l/daab.asp)

Un Saludo,

Miguel Angel Campos
MCSD.NET

"Pragma" escribió en el mensaje
news:
ah si eso es lo que decia pero me refiero a como llamarlo desde el
lenguaje, partiendo de lo siguiente:

- la transaccion no deberia iniciarse desde el lenguaje, sino desde el
gestor

es asi la unica manera que se me ocurre es que antes de empezar a grabar
el detalle ejecutar un comando que llama a un SP que solo inicie una
transaccion y ejecutar ese comando (ExecuteNonQuery)
despues grabar la cabecera (otro executeNonQuery)
y luego grabar todos los detalles (otro ExecuteNonQuery)
y luego llamar a otro SP que hace un Commit a la transaccion

pero no es un proceso que se vea bien se ve mal de hecho por eso busco una
alternativa

salu2!





"Miguel Angel Campos" <SPAMmacampos ARRUBA .idesarrollaSPAM.com> escribió
en el mensaje news:
Puedes crear un procedimiento almacenado para almacenar los datos de la
cabecera de la venta, y posteriormente un procedimiento almacenado que
guarde los datos de una sola línea.
El primer procedimiento la llamarías una sola vez, y el segundo
procedimiento lo llamarais tantas veces como líneas tengas.
Como bien has indicado todo este proceso se debe realizar dentro de una
transacción para evitar que la información se almacene de forma
incompleta.

Un Saludo,

Miguel Angel Campos
MCSD.NET

"Pragma" escribió en el mensaje
news:
tengo que registrar transaccionalmente una venta
de manera abstracta una cabecera de de venta y varios detalles de venta
y lo quiero hacer usando procedimientos almacenados, pero mi problema es
saber como mando todos los detalles de venta puesto que el numero de
detalles no se saben de antemanos, porque en el caso de la cabecera de
venta pues si la cabecera tiene 5 datos puede necesito 5 parametros en
el procedimiento pero en el caso del procedimiento no se como hacerle

gracias











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