Foros del Web » Programación para mayores de 30 ;) » .NET »

Consultar Metadata de una base de datos en Access

Estas en el tema de Consultar Metadata de una base de datos en Access en el foro de .NET en Foros del Web. Hola Amigos, les paso la siguiente consulta: necesito poder acceder a la Metadada de una base de datos de Access de la siguiente manera, dado ...
  #1 (permalink)  
Antiguo 12/05/2008, 11:03
rdm
 
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 57
Antigüedad: 20 años, 6 meses
Puntos: 0
Consultar Metadata de una base de datos en Access

Hola Amigos, les paso la siguiente consulta: necesito poder acceder a la Metadada de una base de datos de Access de la siguiente manera, dado un nombre de archivo de base de datos nnnn.mdb, quiero presentar en pantalla todas sus tablas y luego, mediante algún mecanismo de selección, indicar el nombre de una tabla y que me despliegue toda la información de sus campos: nombre, tipo de campo, tamaño, etc., etc., Debo realizar la programación en C# por lo que si me pueden responder orientados a este lenguaje.

Desde ya, muchas gracias y quedo a la espera de vuestra respuesta.
  #2 (permalink)  
Antiguo 12/05/2008, 13:28
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Consultar Metadata de una base de datos en Access

1.- Create una conexion dinamica a ese archivo.
2.- Y despues haz algo como esto

DbProviderFactory factory =
DbProviderFactories.GetFactory("System.Data.OleDb" );

DataTable userTables = null;

using (DbConnection connection =
factory.CreateConnection())
{

connection.ConnectionString = "Provider=Microsoft .Jet.OLEDB.4.0;DataSource=c:\\test\\test.mdb";
string[] restrictions = new string[4];
restrictions[3] = "Table";
connection.Open();
userTables =
connection.GetSchema("Tables", restrictions);
}


for (int i=0; i < userTables.Rows.Count; i++)
listBox1.Items.Add(userTables.Rows[i][2].ToString());


3.- El paso siguiente sera obtener el tipo de campos con una consulta similar haciendolo sobre la tabla seleccionada
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 12/05/2008, 14:01
rdm
 
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 57
Antigüedad: 20 años, 6 meses
Puntos: 0
Re: Consultar Metadata de una base de datos en Access

Gracias por la respuesta, ya he llegado hasta este resultado empleando las clases me que propones, es decir puedo seleccionar una base de datos, mostrar en un listbox todas sus tablas y luego seleccionar una de ellas y presentar sus campos, el punto donde estoy estancado es respecto del tipo de datos y de su longitud. Voy a explicarles un poquito mas cual es el fin último de esta aplicación: "se necesita construir un archivo txt con los registros de una tabla poniendo una coma (,) al final de cada campo respetando sus longitudes de campo", el problema es que cuando traes un campo de tipo txt, ADO te devuelve solo la cantidad de caracteres que hay efectivamente escritos en el campo, razón por la cual, debo completar con espacios a la izquierda, hasta llegar al tamaño del campo, para ello debo saber de antemano la longitud de dicho campo. La gran complicación es que esta aplicación debe ser automática, no puedo poner un operador a especificar manualmente el tamaño de cada campo, ya que la misma debe funcionar para cualquier base de datos de access cuyo contenido en cuanto a tabla y estructura desconozco.

Nuevamente gracias y sigo a la escucha de ideas.
  #4 (permalink)  
Antiguo 12/05/2008, 14:11
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Consultar Metadata de una base de datos en Access

porque no haces un
tbl es un datatable obteniendolo desde el schema
tbl.Columns[0].MaxLength

y tu palabra la evaluas como

string ajustada=string(' ',MaxLenght-value.Lenght)+value

donde value es tu valor actual a comparar
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 13/05/2008, 11:17
rdm
 
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 57
Antigüedad: 20 años, 6 meses
Puntos: 0
Re: Consultar Metadata de una base de datos en Access

Siguiendo tu consejo he probado las siguientes líneas de código:

DataTable _tabla = tbDatosAux.Tables["TabDatos"];
System.Console.WriteLine(_tabla[2].MaxLength.ToString());

y me devuelve un -1. Estoy seguro que en la posición 3, hay un campo string que tiene definido 30 caracteres. Por otra parte, en la documentación sobre el MaxLenght, se dice que si el campo no tiene definido su longitud máxima, se devolverá -1, tal como me sucede, me devuelve el -1 pero yo estoy seguro que en esa posición hay un string y que mide 30 caracteres.

¿se te ocurre otra pista?...,

Saludos.
  #6 (permalink)  
Antiguo 13/05/2008, 12:17
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Consultar Metadata de una base de datos en Access

se le permiten los nulos a ese campo??
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #7 (permalink)  
Antiguo 14/05/2008, 06:55
rdm
 
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 57
Antigüedad: 20 años, 6 meses
Puntos: 0
Re: Consultar Metadata de una base de datos en Access

Si, están permitidos los nulls, pero, afortunadamente ya he resuelto este problema, para los que estuvieron siguiendo este tema o tengan el mismo problema, pude resolver esto desarrollando el aplicativo con .net 2005, en este nuevo framework, hay un nuevo método: GetSchema de la clase OleDbConnection que tiene unas funciones un poco mas depuradas y acordes a lo que necesitaba.

Saludos y gracias por sus comentarios.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:55.