Чтение файла доступа в набор данных
Вопрос
Есть ли простой способ прочитать весь файл 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, вы, скорее всего, получите как минимум несколько бесполезных ответов.
И вас будут ругать такие, как я, потому что разработчикам действительно следует знать, что лучше не запутывать важные различия.