Как извлечь имена таблиц из базы данных MS Access с помощью ADO - PullRequest
0 голосов
/ 14 декабря 2010

Я пытался использовать этот код:

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, поэтому мне нужны имена баз данных.Как мне обойти эту ошибку?

Ответы [ 3 ]

6 голосов
/ 17 декабря 2010
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 голос
/ 14 декабря 2010

Вы можете получить к нему доступ следующим образом:

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.

РЕДАКТИРОВАТЬ:
Хорошо, так что вы можете получить всетаблиц, использующих решение, подобное следующему: Как мне перечислить все запросы в файле MS Access, используя OleDB в C #? , а затем просмотреть их.

0 голосов
/ 18 апреля 2018

Вы можете попробовать Kros.Utils.MsAccess .Этот пакет поддерживает схема базы данных MsAccess .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...