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
 

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.

Preguntas similares