Вопрос

Есть ли простой способ прочитать весь файл Access (.mdb) в набор данных в .NET (в частности, C# или VB)?

Или хотя бы получить список таблиц из файла доступа, чтобы я мог просмотреть его и добавить их по одной в DataSet?

Это было полезно?

Решение

Спасибо за предложения.Мне удалось использовать эти образцы для составления кода, который, кажется, достигает того, что я ищу.

Using cn = New OleDbConnection(connectionstring)
    cn.Open()
    Dim ds As DataSet = new DataSet()

    Dim Schema As DataTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
    For i As Integer = 0 To Schema.Rows.Count - 1
        Dim dt As DataTable = New DataTable(Schema.Rows(i)!TABLE_NAME.ToString())

        Using adapter = New OleDbDataAdapter("SELECT * FROM " + Schema.Rows(i)!TABLE_NAME.ToString(), cn)
            adapter.Fill(dt)
        End Using

        ds.Tables.Add(dt)
    Next i
End Using

Другие советы

Вы должны иметь возможность получить к нему доступ с помощью ОлеДбСоединение.

Вот урок по доступу к БД с использованием его для файлов MS Access.

Что касается получения имен таблиц, во времена VB6 я всегда использовал ADOX, не знаю, как они делают это сейчас в .NET.Хотя я знаю, что в файле доступа есть системная таблица - хочу сказать «мсо...».Я гуглю!

РЕДАКТИРОВАТЬ

Ах-ха! мсиобъекты !!хД

MSDN есть статья о том, как использовать ADO.NET для подключения и редактирования записей в базе данных Access.После установки соединения с OleDB вы можете легко создать DataReader/DataAdapter и обрабатывать его по мере необходимости.

РЕДАКТИРОВАТЬ:Га!Будь ты проклят, Роб, и твои богоподобные способности печатать!!!8^Д

По этому поводу идет дискуссия Меньше точки.Вот один из примеров кода из обсуждения.

   public DataTable GetColumns(string tableName)
    {
        string[] restrictions = new string[4];
        restrictions[2] = tableName;

        _connDb.Open();

        DataTable mDT = _connDb.GetSchema("Columns", restrictions);

        _connDb.Close();

        return mDT;
    }

Ваш первоначальный вопрос в такой формулировке - ерунда:

Есть ли простой способ прочитать весь файл Access (.mdb) в...

Вы, конечно, не хотите получить все содержимое файла MDB.Вам нужно содержимое ваших таблиц данных, хранящихся в MDB.Имейте в виду, что вам также не нужно содержимое системных таблиц.

Ключевой момент:

Вы спрашиваете о JET, а не о ACCESS.

Jet — это ядро ​​базы данных, которое поставляется в качестве хранилища данных Access по умолчанию (и в котором хранятся собственные объекты Access).Но «Доступ» означает нечто гораздо большее, чем просто таблицы данных.

Всякий раз, когда вы задаете вопрос и путаете Access и Jet, вы, скорее всего, получите как минимум несколько бесполезных ответов.

И вас будут ругать такие, как я, потому что разработчикам действительно следует знать, что лучше не запутывать важные различия.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top