Alternativa al CommandBuilder (menos acoplada)

17/02/2008 - 16:47 por Jose Guzman | Informe spam
Quisiera saber si hay una alternativa al SqlCommandBuilder que no este tan
acoplada a un dataadapter necesariamente (que por cierto no entiendo porque
tanto acoplamiento en ese diseño). Digo algo como de mas bajo nivel por
ejemplo que yo le mande una datatable y las columnas que forman la clave
primaria y me retorne los strings de los comandos generados (para insert,
update y delete).

O si saben de alguna funcion de tercero que ya exista para eso.

Preguntas similare

Leer las respuestas

#1 Jesús López
17/02/2008 - 18:25 | Informe spam
En ADO.NET 2.0 no hay ninguna alternativa. Los command builders son las
únicas clases capaces de generar los comandos de inserción, actualización y
eliminación.

Saludos:

Jesús López
www.solidq.com



"Jose Guzman" escribió en el mensaje
news:%
Quisiera saber si hay una alternativa al SqlCommandBuilder que no este tan
acoplada a un dataadapter necesariamente (que por cierto no entiendo
porque tanto acoplamiento en ese diseño). Digo algo como de mas bajo
nivel por ejemplo que yo le mande una datatable y las columnas que forman
la clave primaria y me retorne los strings de los comandos generados (para
insert, update y delete).

O si saben de alguna funcion de tercero que ya exista para eso.

Respuesta Responder a este mensaje
#2 Juan Diego Bueno
17/02/2008 - 19:53 | Informe spam
Hola José:

Como dice Jesús, es lo único que tienes y vas a tener que estar atado a un
dataadapter.

Me imagino que tu problema venga porque tengas alguna clase que llene el
datatable y quieras que con su uso no tengas porque hacer referencia a un
dataadapter. Si es así, puedes generar un dataadapter para el momento en el
que uses el commandbuilder con la misma query con la que llenaste en su
momento el datatable y hacer el update sobre él. Aunque no sea exactamente
el objeto dataadapter con el que llenaste el datatable, el genera los
comandos igualmente y te permite actualizar sobre ese datatable (espero que
se me haya entendido).

Otra opción que se me ocurre es crear tu un dataadapter pero como componente
insertable. El IDE en este caso te genera los command adecuados. Podrías
tener ese dataadapter como objeto único usando un patrón singleton y hacer
el update desde él con el datatable en cuestión.

Un saludo

Juan Diego Bueno www.moondance.tk

"Jesús López" escribió en el
mensaje news:
En ADO.NET 2.0 no hay ninguna alternativa. Los command builders son las
únicas clases capaces de generar los comandos de inserción, actualización
y eliminación.

Saludos:

Jesús López
www.solidq.com



"Jose Guzman" escribió en el mensaje
news:%
Quisiera saber si hay una alternativa al SqlCommandBuilder que no este
tan acoplada a un dataadapter necesariamente (que por cierto no entiendo
porque tanto acoplamiento en ese diseño). Digo algo como de mas bajo
nivel por ejemplo que yo le mande una datatable y las columnas que forman
la clave primaria y me retorne los strings de los comandos generados
(para insert, update y delete).

O si saben de alguna funcion de tercero que ya exista para eso.





Respuesta Responder a este mensaje
#3 Jose Guzman
18/02/2008 - 02:14 | Informe spam

Me imagino que tu problema venga porque tengas alguna clase que llene el
datatable y quieras que con su uso no tengas porque hacer referencia a un
dataadapter. Si es así, puedes generar un dataadapter para el momento en
el que uses el commandbuilder con la misma query con la que llenaste en su
momento el datatable y hacer el update sobre él. Aunque no sea exactamente
el objeto dataadapter con el que llenaste el datatable, el genera los
comandos igualmente y te permite actualizar sobre ese datatable (espero
que se me haya entendido).



Si, interpretaste mas o menos correctamente la idea de lo que quiero hacer y
he realizado una prueba sobre eso que me explicas, el problema es que el
dataadapter (o el commandbuilder) vuelve y viaja al servidor a buscar el
esquema como ignorando el esquema que ya pueda tener la tabla. Esto lo hace
un poco lento cuando se tengan varias tablas en ese situacion.
Habría alguna manera de "copiar" el esquema que ya uno tiene en una tabla
hacia el commandbuilder para impedir que mande al servidor de nuevo a
buscarlo?


Otra opción que se me ocurre es crear tu un dataadapter pero como
componente insertable. El IDE en este caso te genera los command
adecuados. Podrías tener ese dataadapter como objeto único usando un
patrón singleton y hacer el update desde él con el datatable en cuestión.




Traté tambien pero el sqldataadapter como tantas otras clases de datos
especificas de proveedores, no se puede heredar :( Creo que solo lo hace
para los datasets tipados.
Gracias de todas maneras.
Seguire haciendo pruebas sobre lo que me has dicho.

Saludos
Respuesta Responder a este mensaje
#4 Juan Diego Bueno
18/02/2008 - 07:00 | Informe spam
"Jose Guzman" escribió en el mensaje
news:

Si, interpretaste mas o menos correctamente la idea de lo que quiero hacer
y he realizado una prueba sobre eso que me explicas, el problema es que el
dataadapter (o el commandbuilder) vuelve y viaja al servidor a buscar el
esquema como ignorando el esquema que ya pueda tener la tabla. Esto lo
hace un poco lento cuando se tengan varias tablas en ese situacion.
Habría alguna manera de "copiar" el esquema que ya uno tiene en una tabla
hacia el commandbuilder para impedir que mande al servidor de nuevo a
buscarlo?



Lo que puedes hacer es obtener los diferentes Commands que genera el
Commandbuilder y guardarlos para su uso posterior. El CommandBuilder tiene
GetInsertCommand, GetUpdateCommand y GetDeleteCommand para eso. Así no
tendrás que volver al servidor y además ganas en rendimiento, puesto que el
commandbuilder no tiene que volver a generarlos.

Saludos
Respuesta Responder a este mensaje
#5 Jesús López
18/02/2008 - 10:34 | Informe spam
La cuestión es si ya conoces en tiempo de diseño las tablas de la base de
datos y su estructura. Si esto es así, no necesitas usar los command
builders. Puedes tener componentes que tengan ya los dataadapters con los
comandos de inserción, actualización y eliminación preconfigurados.

Prueba lo siguiente:

1) Añade un componente a tu proyecto. Botón derecho del ratón sobre el
proyecto y selecciona Add->Component
2) Añade un SqlDataAdapter desde la caja de herramientas.
3) Sigue el asistente para la configuración del DataAdapter.

De esta manera tendrás un componente con un DataAdapter que podrás usar para
el acceso a datos de una tabla de la base de datos. Puedes añadir métodos a
este componente que usen el dataadapter para lo que necesites, o hacer
público si quieres el dataadapter. También puedes añadir más de un
DataAdapter al mismo componente si es que quieres que el mismo componente
pueda manejar el acceso a datos de más de una tabla. Además teniendo un
componente para acceso a datos puedes añadirlo a la superficie de diseño de
otros componentes y de formularios.


Los DataAdapters no aparecen en la caja de herramientas de forma
predeterminada, pero pueden añadirse:

1) Pulsa con el botón derecho del ratón en la caja de herramientas y elije
"Choose items"
2) Marca SqlDataAdapter en la lista de ".NET Framework Components"

Saludos:

Jesús López
www.solidq.com



"Jose Guzman" escribió en el mensaje
news:
>
Me imagino que tu problema venga porque tengas alguna clase que llene el
datatable y quieras que con su uso no tengas porque hacer referencia a un
dataadapter. Si es así, puedes generar un dataadapter para el momento en
el que uses el commandbuilder con la misma query con la que llenaste en
su momento el datatable y hacer el update sobre él. Aunque no sea
exactamente el objeto dataadapter con el que llenaste el datatable, el
genera los comandos igualmente y te permite actualizar sobre ese
datatable (espero que se me haya entendido).



Si, interpretaste mas o menos correctamente la idea de lo que quiero hacer
y he realizado una prueba sobre eso que me explicas, el problema es que el
dataadapter (o el commandbuilder) vuelve y viaja al servidor a buscar el
esquema como ignorando el esquema que ya pueda tener la tabla. Esto lo
hace un poco lento cuando se tengan varias tablas en ese situacion.
Habría alguna manera de "copiar" el esquema que ya uno tiene en una tabla
hacia el commandbuilder para impedir que mande al servidor de nuevo a
buscarlo?


Otra opción que se me ocurre es crear tu un dataadapter pero como
componente insertable. El IDE en este caso te genera los command
adecuados. Podrías tener ese dataadapter como objeto único usando un
patrón singleton y hacer el update desde él con el datatable en cuestión.




Traté tambien pero el sqldataadapter como tantas otras clases de datos
especificas de proveedores, no se puede heredar :( Creo que solo lo hace
para los datasets tipados.
Gracias de todas maneras.
Seguire haciendo pruebas sobre lo que me has dicho.

Saludos

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida