Como hayar las claves foraneas de una tabla

29/04/2008 - 23:04 por Gallegote | Informe spam
Buenas, tengo un problemilla que la verdad no se si tiene solucion, me
explico:

Estoy haciendo un programa en c# que se necesita conectar a cualquier
base de datos via ODBC y obtener una cierta informacion sobre ella,
(esquemas, tablas, vistas, campos, tipos), mas o menos he podido
conseguir leer toda la informacion que necesitaba (los distintos
esquemas de la BD creo que lo he echo de forma chapucera pero
weno...), el caso es que no soy capaz de obtener las claves foraneas
que existen en las tablas, ni las restricciones que estas tienen, como
not null, default, ¿Como podria obtener esta informacion?

Ahora mismo para leer la tabla lo tengo mas o menos asi:


DataTable tabla = new DataTable(nombreTabla);
OdbcDataAdapter adapterBD = new OdbcDataAdapter(select,
conexionBD);

adapterBD.MissingSchemaAction MissingSchemaAction.AddWithKey;
adapterBD.Fill(tabla)

datasetBD.Tables.Add(tabla);

//Con esto obtengo la clave principal
datasetBD.tables[nombreTabla].PrimaryKey()


El caso, esque de esta forma si obtengo la clave principal, pero el
resto de claves y restricciones no se como habarlas, ya que:
datasetBD.Tables[nombreTabla].ChildRelations(); y
datasetBD.Tables[nombreTabla].ParentRelations(); me devuelven
colecciones vacias cuando no lo son.

Haber si me podeis echar una manita ^^

Saludos

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
30/04/2008 - 09:12 | Informe spam
"Gallegote" wrote in message
news:
[...] el caso es que no soy capaz de obtener las claves foraneas
que existen en las tablas, ni las restricciones que estas tienen, como
not null, default, ¿Como podria obtener esta informacion?



Utiliza el método GetOleDbSchemaTable del objeto OleDbConnection:

DataTable schemaTable =
conexion.GetOleDbSchemaTable(OleDbSchemaGuid.Foreign_Keys, new object[]
{null, null, null, null, null, nombreTabla});

En el DataTable devuelto, examina lor registros recibidos, y verás que
tienes columnas llamadas PK_COLUMN_NAME, PK_TABLE_NAME, FK_COLUMN_NAME,
etc., que describen las claves que estás buscando.
Respuesta Responder a este mensaje
#2 Gallegote
30/04/2008 - 22:17 | Informe spam
Muchas gracias por la informacion, investigare este metodo, pero
necesitaria obtener la informacion a traves de una conexion ODBC.
Respuesta Responder a este mensaje
#3 Alberto Poblacion
01/05/2008 - 09:06 | Informe spam
"Gallegote" wrote in message
news:
Muchas gracias por la informacion, investigare este metodo, pero
necesitaria obtener la informacion a traves de una conexion ODBC.



Ufff! ¿Qué base de datos estás utilizando, que solo tiene driver de ODBC y
todavía no le han hecho uno para OleDb?
Respuesta Responder a este mensaje
#4 Gallegote
01/05/2008 - 12:46 | Informe spam
Ufff! ¿Qué base de datos estás utilizando, que solo tiene driver de ODBC y
todavía no le han hecho uno para OleDb?



No no, ese no es el problema, pero en las especificaciones del
programa pone que tiene que ser por ODBC, además no va a ser para
ninguna base de datos concreta, se podrá conectar a SQL Server, MySQL,
Oracle, DB2, Access, lo que le pille vamos, por eso se opto por
conexiones ODBC, el caso es que no encuentro una forma "estandar" para
sacar las claves foraneas, y la solucion que me estoy planteando, es
identificar la base de datos y segun el tipo que sea hayar las claves
de una forma (consultando sus tablas de sistema o algo asi), poniendo
los pasos en un archivo XML externo, para no tener que volver a
compilar el programa cada vez que queramos usar una base de datos que
no contemple, esto me supone un coñazo inmenso y antes de tomar esta
via quiero asegurarme de que no hay ninguna forma "estandar" que pueda
usar y olvidarme de lo del archivo (que tampoco se si sera posible XD)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida