Columnas de la clave primaria

12/01/2008 - 21:46 por Erick \(foxero\) | Informe spam
Como se obtienen las columnas de las claves primarias de una datatable?

Preguntas similare

Leer las respuestas

#6 Erick \(foxero\)
13/01/2008 - 13:33 | Informe spam
Hola Alberto.

Podría hacerlo pero le veo dos inconvenientes al AddWithKey:
1-Tengo necesariamente que hacer un Fill y en este caso solo me interesa
cargar el esquema para llenar la propiedad PrimaryKey de datatable (y
tambien los constraints que bajan junto) y dejarla en blanco inicialmente.
Podria ok enviar el select con un where que no me retorne registros (where
1>2) pero de todos modos serian dos instrucciones para lo mismo.
2-El AddWithKey hace que repita la carga del esquema con solo refrescar los
datos del datatable, es decir, aunque el selectcommand no haya cambiado en
nada. En eso es distinto al FillSchema.

Lo que estoy buscando es cargar solo el esquema de inicio y evitar la
necesidad de que se vuelva a cargar innecesariamente. Esto es debido a que
el programa que estoy haciendo se va a utilizar en una VPN y los round-trips
innecesarios pueden bajar mucho el rendimiento. Solo hay que pensar que eso
lo haría por cada tabla.
Finalmente si no hay mejor remedio me decantaria por el FillSchema a pesar
de que el commandbuilder no lo reconoce hasta que se da a Update o se lee
algun comando con los metodos getcommand, lo cual provoca una nueva e
innecesaria lectura del esquema, pero al menos esta no lo hace cada vez que
se refrescan los datos como hace el AddWithKey.


Saludos

Erick




"Alberto Poblacion"
escribió en el mensaje news:
"Erick (foxero)" <eric> wrote in message
news:%
Como se obtienen las columnas de las claves primarias de una datatable?



Cuando construyas el DataAdapter, en su propiedad MissingSchemaAction
ponle el valor AddWithKey. Esto ocasiona que, al llenar el DataTable con
el DataAdapter, te cree el esquema de la tabla (si no existe ya) con la
clave primaria y las restricciones de unicidad de colmnas que existan en
la base de datos.


Respuesta Responder a este mensaje
#7 principiante
14/01/2008 - 14:11 | Informe spam
A menos que alguien mas pueda aportar mas luz en ese tema, yo creo que es
poco lo que puedes hacer siempre que uses un commandbuilder. Son de esas
limitaciones que siempre ha tenido el ADO.NET, y por lo visto las sigue
teniendo.
La opcion que tienes es no usar un commandbuilder y asignar tú directamente
los comandos al DataAdapter. Por supuesto en tu caso es mas critico por los
requerimientos de performance que tienes. De no ser asi no seria tan grave
ese viaje adicional que hace el commandbuilder al servidor.

Ojalá el LinQ traiga algunas mejoras al respecto para la nueva versión.

Jose TH

"Erick (foxero)" <eric> escribió en el mensaje
news:
Hola Alberto.

Podría hacerlo pero le veo dos inconvenientes al AddWithKey:
1-Tengo necesariamente que hacer un Fill y en este caso solo me interesa
cargar el esquema para llenar la propiedad PrimaryKey de datatable (y
tambien los constraints que bajan junto) y dejarla en blanco inicialmente.
Podria ok enviar el select con un where que no me retorne registros (where
1>2) pero de todos modos serian dos instrucciones para lo mismo.
2-El AddWithKey hace que repita la carga del esquema con solo refrescar
los datos del datatable, es decir, aunque el selectcommand no haya
cambiado en nada. En eso es distinto al FillSchema.

Lo que estoy buscando es cargar solo el esquema de inicio y evitar la
necesidad de que se vuelva a cargar innecesariamente. Esto es debido a que
el programa que estoy haciendo se va a utilizar en una VPN y los
round-trips innecesarios pueden bajar mucho el rendimiento. Solo hay que
pensar que eso lo haría por cada tabla.
Finalmente si no hay mejor remedio me decantaria por el FillSchema a pesar
de que el commandbuilder no lo reconoce hasta que se da a Update o se lee
algun comando con los metodos getcommand, lo cual provoca una nueva e
innecesaria lectura del esquema, pero al menos esta no lo hace cada vez
que se refrescan los datos como hace el AddWithKey.


Saludos

Erick




"Alberto Poblacion"
escribió en el mensaje news:
"Erick (foxero)" <eric> wrote in message
news:%
Como se obtienen las columnas de las claves primarias de una datatable?



Cuando construyas el DataAdapter, en su propiedad MissingSchemaAction
ponle el valor AddWithKey. Esto ocasiona que, al llenar el DataTable con
el DataAdapter, te cree el esquema de la tabla (si no existe ya) con la
clave primaria y las restricciones de unicidad de colmnas que existan en
la base de datos.






Respuesta Responder a este mensaje
#8 Gonzalo Rodríguez Carrera
14/01/2008 - 18:07 | Informe spam
Espero haber entendido bien la pregunta... ¿quieres obtener las
primary keys de un datatable? ¿no?

Yo lo he solucionado de la siguiente forma -te copio y pego un trocito
de una clase mía-

//Instancio un command para leer de la base de datos
OleDbCommand oCmm = new OleDbCommand(strQuery, cnn);

// Hago un executeReader con el CommandBehavior.KeyInfo para que
obtenga la información de PrmaryKeys
OleDbDataReader oDR = oCmm.ExecuteReader(CommandBehavior.KeyInfo);

// Cargo el datareader en el datatable con el método load
dtRetorno.Load(oDR,LoadOption.OverwriteChanges);

Leyendo lo que he leido no se yo si estaré en lo correcto -soy
totalmente un principiante, apenas llevo un par de meses- pero a mí
esto me ha funcionado...

Saludos.

Gonzalo Rodríguez Carrera
Vigo - España
Respuesta Responder a este mensaje
#9 Erick \(foxero\)
14/01/2008 - 20:52 | Informe spam
Originalmente si, pero investigando las distintas maneras sobre todo si uso
un commandbuilder lo que trato es de hacerlo de la forma mas eficiente
posible es decir para que no me haga round-trips innecesarios al servidor ya
que a aparte de tener la pk tambien luego hare actualizaciones y otras
cosas.
De ahi los detalles que doy en los otros mensajes.

De todas formas gracias por tu aportacion.


"Gonzalo Rodríguez Carrera" escribió en el mensaje
news:
Espero haber entendido bien la pregunta... ¿quieres obtener las
primary keys de un datatable? ¿no?

Yo lo he solucionado de la siguiente forma -te copio y pego un trocito
de una clase mía-

//Instancio un command para leer de la base de datos
OleDbCommand oCmm = new OleDbCommand(strQuery, cnn);

// Hago un executeReader con el CommandBehavior.KeyInfo para que
obtenga la información de PrmaryKeys
OleDbDataReader oDR = oCmm.ExecuteReader(CommandBehavior.KeyInfo);

// Cargo el datareader en el datatable con el método load
dtRetorno.Load(oDR,LoadOption.OverwriteChanges);

Leyendo lo que he leido no se yo si estaré en lo correcto -soy
totalmente un principiante, apenas llevo un par de meses- pero a mí
esto me ha funcionado...

Saludos.

Gonzalo Rodríguez Carrera
Vigo - España
Respuesta Responder a este mensaje
#10 Erick \(foxero\)
14/01/2008 - 20:53 | Informe spam
Veré eso tambien de asignar los comandos directamente.

gracias.

"principiante" escribió en el mensaje
news:%
A menos que alguien mas pueda aportar mas luz en ese tema, yo creo que es
poco lo que puedes hacer siempre que uses un commandbuilder. Son de esas
limitaciones que siempre ha tenido el ADO.NET, y por lo visto las sigue
teniendo.
La opcion que tienes es no usar un commandbuilder y asignar tú
directamente los comandos al DataAdapter. Por supuesto en tu caso es mas
critico por los requerimientos de performance que tienes. De no ser asi no
seria tan grave ese viaje adicional que hace el commandbuilder al
servidor.

Ojalá el LinQ traiga algunas mejoras al respecto para la nueva versión.

Jose TH

"Erick (foxero)" <eric> escribió en el mensaje
news:
Hola Alberto.

Podría hacerlo pero le veo dos inconvenientes al AddWithKey:
1-Tengo necesariamente que hacer un Fill y en este caso solo me interesa
cargar el esquema para llenar la propiedad PrimaryKey de datatable (y
tambien los constraints que bajan junto) y dejarla en blanco
inicialmente. Podria ok enviar el select con un where que no me retorne
registros (where 1>2) pero de todos modos serian dos instrucciones para
lo mismo.
2-El AddWithKey hace que repita la carga del esquema con solo refrescar
los datos del datatable, es decir, aunque el selectcommand no haya
cambiado en nada. En eso es distinto al FillSchema.

Lo que estoy buscando es cargar solo el esquema de inicio y evitar la
necesidad de que se vuelva a cargar innecesariamente. Esto es debido a
que el programa que estoy haciendo se va a utilizar en una VPN y los
round-trips innecesarios pueden bajar mucho el rendimiento. Solo hay que
pensar que eso lo haría por cada tabla.
Finalmente si no hay mejor remedio me decantaria por el FillSchema a
pesar de que el commandbuilder no lo reconoce hasta que se da a Update o
se lee algun comando con los metodos getcommand, lo cual provoca una
nueva e innecesaria lectura del esquema, pero al menos esta no lo hace
cada vez que se refrescan los datos como hace el AddWithKey.


Saludos

Erick




"Alberto Poblacion"
escribió en el mensaje news:
"Erick (foxero)" <eric> wrote in message
news:%
Como se obtienen las columnas de las claves primarias de una datatable?



Cuando construyas el DataAdapter, en su propiedad MissingSchemaAction
ponle el valor AddWithKey. Esto ocasiona que, al llenar el DataTable con
el DataAdapter, te cree el esquema de la tabla (si no existe ya) con la
clave primaria y las restricciones de unicidad de colmnas que existan en
la base de datos.










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