Как создать базу данных Microsoft Access в C # программно? - PullRequest
16 голосов
/ 24 января 2011

Как создать файл базы данных Microsoft Access в C #, если он еще не существует?

Ответы [ 4 ]

17 голосов
/ 24 января 2011

Самый простой ответ - встроить пустой файл .mdb / .accdb в вашу программу и записать его на диск.

Правильный ответ - использовать COM Interop с библиотекой ADOX:

var cat = new ADOX.Catalog()
cat.Create(connectionString);

Не забудьте сгенерировать строки подключения, используя OleDbConnectionStringBuilder.

12 голосов
/ 25 января 2012

Попробуйте:

using ADOX; //Requires Microsoft ADO Ext. 2.8 for DDL and Security
using ADODB;

public bool CreateNewAccessDatabase(string fileName)
{
bool result = false; 

ADOX.Catalog cat = new ADOX.Catalog();
ADOX.Table table = new ADOX.Table();

//Create the table and it's fields. 
table.Name = "Table1";
table.Columns.Append("Field1");
table.Columns.Append("Field2");

try
{
    cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + "; Jet OLEDB:Engine Type=5");
    cat.Tables.Append(table);

    //Now Close the database
    ADODB.Connection con = cat.ActiveConnection as ADODB.Connection;
    if (con != null)
    con.Close();

    result = true; 
}
catch (Exception ex)
{
    result = false;
}
cat = null;
return result;
} 

http://zamirsblog.blogspot.com/2010/11/creating-access-database.html

9 голосов
/ 16 июля 2012

На моем компьютере, Windows 7 sp1 Professional 64-bit, я обнаружил Microsoft ADO Ext.2.8 для DDL и безопасности в C: \ Program Files \ Common Files \ System \ ado \ msadox28.dll .

Также можно найти ссылку:

enter image description here

, который включен как ADOX в ссылках

enter image description here

По умолчанию столбцы создаются как текст [255] .Вот несколько примеров создания столбцов как различных типов данных.

table.Columns.Append("PartNumber", ADOX.DataTypeEnum.adVarWChar, 6); // text[6]
table.Columns.Append("AnInteger", ADOX.DataTypeEnum.adInteger); // Integer 

Я нашел этот список типов данных для создания и чтения полей доступа к базе данных

Access Text = adVarWChar

Access Memo = adLongVarWChar

Access Numeric Byte = adUnsignedTinyInt

Access Numeric Integer = adSmallInt

Access Numeric Long Integer = adInteger

Access Numeric SingleТочность = adSingle

Доступ к числовому двойному Точность = adDouble

Доступ к числовому идентификатору репликации = adGuid

Доступ к числовому десятичному = adNumeric

Дата доступа / время =adDate

Валюта доступа = adCurrency

Доступ AutoNumber = adInteger

Доступ Да / Нет = adBoolean

Доступ HyperLink = adLongVarWChar

0 голосов
/ 27 февраля 2019

Вы можете использовать метод CreateDatabase в библиотеке DAO / ACE (он установлен вместе с Office или доступен для загрузки из здесь ).

// using Microsoft.Office.Interop.Access.Dao;
// using static Microsoft.Office.Interop.Access.Dao.DatabaseTypeEnum;

const string dbLangGeneral = ";LANGID=0x0409;CP=1252;COUNTRY=0";

var engine = new DBEngine();
var dbs = engine.CreateDatabase(@"c:\path\to\database.accdb", dbLangGeneral, dbVersion120);
dbs.Close();
dbs = null;

Обратите внимание, что в зависимости от версии Access / Jet, которую вы хотите поддерживать в своей базе данных, вы можете использовать другие значения из перечисления DatabaseTypeEnum:

  • dbVersion10
  • dbVersion11
  • dbVersion20
  • dbVersion30
  • dbVersion40
  • dbVersion120
  • dbVersion140
  • dbVersion150

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

Примечание: если у вас 64-битный компьютер и вы хотитеЗапустите код как часть 64-битной программы, вам понадобится 64-битная версия движка.Если у вас уже установлена ​​32-битная версия (либо через Office, либо через загрузку), вам придется запустить 64-битную программу установки с флагами /passive и /silent;в противном случае вы получите сообщение о невозможности установки 64-разрядных компонентов поверх ранее установленных 32-разрядных компонентов.

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