2011-05-27 18 views

Respuesta

11

Prueba el GetSchema()

connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\access.mdb";  

    connection.Open(); 

    DataTable userTables = connection.GetSchema("Tables"); 
+0

¡Tantas grandes respuestas elegantes cuando esto era todo lo que quería! ¡¡Gracias!! – CindyH

7

código completo: Get List of Tables in an Access Database - ADO.NET Tutorials

// 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); 
} 

// Add list of table names to listBox 
for (int i=0; i < userTables.Rows.Count; i++) 
    listBox1.Items.Add(userTables.Rows[i][2].ToString()) 

aquí es la respuesta para usted: http://social.msdn.microsoft.com/Forums/en/adodotnetdataproviders/thread/d2eaf851-fc06-49a1-b7bd-bca76669783e

1

Algo como esto debe hacer el truco. La cláusula Type = 1 especifica tablas. Tenga en cuenta que esto también incluye las tablas del sistema en el conjunto de resultados (que empiezan con el prefijo "MSys"

SELECT Name FROM MSysObjects WHERE Type = 1 
+0

tratando y me sale:. 'Record (s) no se puede leer, no hay permiso de lectura en 'MSysObjects'. – hawbsl

+0

@hawbsl Parece que podría necesitar modificar los permisos dentro de Access Database. Menú Herramientas -> Seguridad -> Permisos de usuario y grupo. Asignar 'Leer datos' permiso para el usuario administrador en la tabla MSysObjects. –

+0

Cambiar permisos como ese violaría quizás la seguridad a nivel de usuario que se ha configurado a propósito. La solución es no cambiar los permisos en el objeto subyacente (que lo abriría completamente a nadie), sino usar un nombre de usuario/contraseña que tenga los permisos que necesita. –

Cuestiones relacionadas