2009-11-09 15 views
11

Si puedo abrir una conexión a un archivo MS Access en C#, ¿cómo puedo recuperar una lista de las diferentes tablas que existen en Access DB (y si es posible, cualquier metadato asociado con las tablas)?Recuperar lista de tablas en el archivo MS Access

+0

Lo metadatos está usted en necesidad de conocer? –

+0

Por lo menos, la descripción de la tabla (si se guarda) –

+0

posible duplicado de [¿Cómo puedo obtener una lista de tablas en una base de datos de Access (Jet)?] (Http://stackoverflow.com/questions/ 6152545/how-can-i-get-a-list-of-tables-in-access-jet-database) – Fionnuala

Respuesta

25

me acaba de encontrar la siguiente solución de David Hayden

// Microsoft Access provider factory 
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb"); 

DataTable userTables = null; 
using (DbConnection connection = factory.CreateConnection()) { 
    // c:\test\test.mdb 
    connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\test\\test.mdb"; 
    // We only want user tables, not system tables 
    string[] restrictions = new string[4]; 
    restrictions[3] = "Table"; 

    connection.Open(); 

    // Get list of user tables 
    userTables = connection.GetSchema("Tables", restrictions); 
} 

List<string> tableNames = new List<string>(); 
for (int i=0; i < userTables.Rows.Count; i++) 
    tableNames.Add(userTables.Rows[i][2].ToString()); 
+0

¿Alguna ayuda para encontrar el número más alto en una columna en particular? Usando C# – gsvirdi

1

Aquí hay algunos enlaces:

He aquí una VB.NET snipit para obtener todas las columnas de una tabla de acceso, sé que no es exactamente lo que usted' Estoy buscando, pero una primciple manzanas similares al enumerar todas las tablas:

Dim oleConn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & myDB & ";User Id=admin;Password=;") 

oleConn.Open() 
Dim schemaTable As DataTable 
Dim i As Integer 
schemaTable = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Column s, _ 
New Object() {Nothing, Nothing, "tblTheTableToListColumns", Nothing}) 
For i = 0 To schemaTable.Columns.Count - 1 
Debug.Print(schemaTable.Rows(i)!COLUMN_NAME.ToStri ng) 
Next i 
oleConn.Close()