2010-12-14 5 views
0

를 사용하여 MS Access 데이터베이스에서 테이블 이름 추출 않습니다어떻게 내가이 코드를 사용하여 시도 ADO

OleDbConnection c = new OleDbConnection(con); 
string SQLS = "SELECT MSysObjects.Name FROM MSysObjects WHERE MSysObjects.Name Not Like 'MsyS*' AND MSysObjects.Type=1 ORDER BY MSysObjects.Name"; 
OleDbDataAdapter da = new OleDbDataAdapter(SQLS, c); 
DataTable dt = new DataTable(); 
da.Fill(dt); 
dataGridView1.DataSource = dt; 

을하지만 난이 예외 가지고 :

기록을 (를) 읽을 수 없습니다; 'MSysObjects'에 대한 읽기 권한이 없습니다.

이제 전체 ms-access 데이터베이스를 프로그래밍 방식으로 mysql에 전송해야하므로 데이터베이스 이름이 필요합니다. 이 오류를 해결하려면 어떻게해야합니까?

답변

6
using System; 
using System.Data; 
using System.Data.OleDb; 

public class DatabaseInfo {  
    public static void Main() { 
     String connect = "Provider=Microsoft.JET.OLEDB.4.0;data source=.\\Employee.mdb"; 
     OleDbConnection con = new OleDbConnection(connect); 
     con.Open(); 
     Console.WriteLine("Made the connection to the database"); 

     Console.WriteLine("Information for each table contains:"); 
     DataTable tables = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[]{null,null,null,"TABLE"}); 

     Console.WriteLine("The tables are:"); 
      foreach(DataRow row in tables.Rows) 
       Console.Write(" {0}", row[2]); 


     con.Close(); 
    } 
} 

은 내가이 내가 데이터베이스의 테이블이 무엇인지 모르는 가정으로가는 http://www.java2s.com/Code/CSharp/Database-ADO.net/Getalltablenames.htm

1

이처럼 액세스 할 수 있습니다

OleDbConnection conn = 
new OleDbConnection(
    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
    "C:\\phycoaide\\phycoaide.mdb;Persist Security Info=False;"); 

// retrieving schema for a single table 
OleDbCommand cmd = new OleDbCommand("taxa", conn); 
cmd.CommandType = CommandType.TableDirect; 
conn.Open(); 
OleDbDataReader reader = 
cmd.ExecuteReader(CommandBehavior.SchemaOnly); 
DataTable schemaTable = reader.GetSchemaTable(); 
reader.Close(); 
conn.Close(); 

은 자세한 내용은 http://harborsparrow.blogspot.com/2009/05/c-code-to-get-schema-of-access-table.html를 참조하십시오.

편집 :
그렇다면 How do I list all the queries in a MS Access file using OleDB in C#?과 같은 솔루션을 사용하여 모든 테이블을 검색 한 다음 루프백 할 수 있습니다.

+0

에서 촬영 ///. – aristotaly

+0

기꺼이 도와 드리겠습니다. 트릭을하면 대답으로 표시하십시오! :-) – MAW74656

+0

하지만 나는 다른 종류의 대답을 찾으려합니다 ... :) – aristotaly

관련 문제