2015-09-23 3 views
2

Я новичок в C#, и я разрабатываю приложение, которое использует небольшую базу данных Access. Я пытался понять, что использовать, ADODB или OLEDB, но, похоже, я не смог решить вопрос.Нужно ли использовать ADODB и OLEDB?

Итак, возможно ли использовать только одну из этих библиотек? Или это нормально использовать оба?

Например, обычные вещи с базами данных:

string MyQuery = "SELECT * FROM MyTable"; 
Recordset rs = new Recordset(); 
rs.Open(MyQuery, MyConnection, CursorTypeEnum.adOpenKeyset, LockTypeEnum.adLockOptimistic); 

использует все объекты ADOdb до:

OleDbDataAdapter adapter = new OleDbDataAdapter(); 
DataTable dt = new DataTable("MyTable"); 
adapter.Fill(dt, rs); 

поэтому я кормить DataGridView с DataTable. Адаптером является OLEDB, а не ADODB. Есть ли способ избежать OLEDB? Таким образом, я думал, что я избавилась от ADODB и делать все, что в OLEDB, все шло хорошо, пока я не хотел добавлять таблицы во время выполнения:

ADOX.Catalog MyCat = new ADOX.Catalog(); 
MyCat.ActiveConnection = MyConnection; 
ADOX.Table table = new ADOX.Table(); 
table.Name = "MyTable"; 
table.Columns.Append("ID", ADOX.DataTypeEnum.adInteger); 
table.Columns["ID"].ParentCatalog = MyCat; 
table.Columns["ID"].Properties["AutoIncrement"].Value = true; 
table.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "ID"); 
table.Columns.Append("DateAdded", ADOX.DataTypeEnum.adDate); 
table.Columns.Append("Name"); 
table.Columns.Append("Surname"); 
cat.Tables.Append(table); 

где каталог абсолютно отказывается соединение OLEDB и требует ADODB один, так что я должен был спасение ADODB.

Итак, в конце концов, мне нужно уйти в отставку, чтобы использовать оба варианта, или я делаю что-то не так в образцах кода, которые я разместил? Альтернативы приветствуются, спасибо заранее.

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

ответ

3

Взятые из this answer by an MCC, MVP:

OLEDB является стандартом Microsoft, который определяет набор API (интерфейс приложений) функции для доступа к базе данных. Это API COM (Component Object Model), который является продолжением API ODBC. Обычно OLEDB используется для создания конкретного драйвера базы данных, известного как поставщик, который может быть реализован библиотекой доступа на более высоком уровне, такой как ADO или ADO.NET.

ADO (ADODB) - это общая библиотека базы данных (COM), которую могут использовать языки программирования, такие как Visual Basic и C++, для доступа к любой базе данных, для которой был разработан поставщик OLEDB. В этом контексте ADO является OLEDB Consumer. Он связывается с поставщиком OLEDB, который, в свою очередь, связывается с базой данных напрямую или сервером базы данных.

Например, чтобы открыть доступ к базе данных, объект Подключение ADODB будет указать Jet OLEDB Provider в его строке соединения, чтобы открыть и затем взаимодействовать с базой данных:

ADODB.Connection cnn; 

cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
          "Data Source=E:\My Documents\db1.mdb;" + 
          "Jet OLEDB:Engine Type=5"; 
cnn.Open(); 

Для меня это подразумевает что, если у вас нет конкретного провайдера ADO, который вы хотите использовать, было бы лучше/быстрее использовать OLEDB напрямую.

Однако OLE может потребовать больше времени разработки, хотя ADO будет быстрее развиваться, но медленнее, чем OLE.

Некоторые ведущие вопросы: Какая строка подключения? (Ваша проблема означает, что вы используете поставщика ADODB в строке подключения). Что такое ADOX?

P.S.Некоторые справочные материалы для вас:

Microsoft Access Performance Tips to Speed up Your Access Databases

Access connection strings

EDIT: Взятые из here: «Начиная с версии 2007 года, Access включает в себя офис конкретной версии Jet, первоначально под названием Office Access (ACE), но теперь он называется механизмом доступа к базам данных. Этот движок полностью совместим с предыдущими версиями движка Jet, поэтому он читает и записывает (.mdb) файлы из более ранних версий Access. формат файла по умолчанию, (.accdb), что bri Несколько улучшений доступа, включая сложные типы данных, такие как многозначные поля, тип данных вложения и отслеживание истории в полях заметок. Он также приносит улучшения безопасности и шифрования и обеспечивает интеграцию с Microsoft Windows SharePoint Services 3.0 и Microsoft Office Outlook 2007"

Также вы можете работать в 64-битных проблем с Jet ...

«Водитель не является частью операционной системы Windows, но доступен как распространяемый. [11] Раньше двигатель базы данных Jet был только 32-разрядным и не запускался изначально под 64-разрядными версиями Windows. »

Для того, чтобы работать с MS Access через C#, читайте this good tutorialЕсли вы прокрутите страницу вниз до раздела с названием «Access (ACCDB)» вы увидите код использует ADOX.catalog

EDIT2:. для получения информации о ADOX.Catalog read this «Открыть каталог, установив свойство ActiveConnection к ADO Connection объект или действительная строка подключения. "

Так попробовать что-то вроде этого ... Taken from the post underneath the accepted answer by Gord Thompson

ADOX.Catalog cat; 
ADOX.Table tbl; 

cat.ActiveConnection = _ 
    "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
    "Data Source=C:\Users\Public\Database1.accdb;" 
+0

Спасибо за быстрый ответ. Ваши вопросы: моя строка подключения - «Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = mydatabase.mdb»; в то время как ADOX - Interop.ADOX = Microsoft ADO Ext. 2.8 для DDL и безопасности. Итак, вы говорите, что я должен придерживаться OLEDB? В этом случае я не знаю, как использовать каталог для подключения к подключению OLEDB, как я сказал во второй части кода, который я опубликовал. –

+0

ADOX предназначен для создания баз данных с нуля по коду или для изменения схемы/дизайна по коду. Может также использоваться для допроса деталей схемы базы данных. – eric1825

+0

@ArneSaknussemm Для начала используйте ACE (он заменил Jet) ... информацию о строке соединения можно найти в верхней части https://www.connectionstrings.com/access/ СМОТРИТЕ МОЙ EDIT –

Смежные вопросы