Как создать базу данных Microsoft Access в C# программно?

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

3 ответа

Решение

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

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

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

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

Пытаться:

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

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

Это также найдено в качестве ссылки:

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

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

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

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

Текст доступа = adVarWChar

Access Memo = adLongVarWChar

Доступ к числовому байту = adUnsignedTinyInt

Доступ к числовому целому числу = adSmallInt

Access Numeric Long Integer = adInteger

Доступ к числовой одинарной точности = adSingle

Access Numeric Double Precision = adDouble

Access Numeric Replicatie-id = adGuid

Access Numeric Decimal = adNumeric

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

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

Access AutoNumber = adInteger

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

Доступ HyperLink = adLongVarWChar

Вы можете использовать метод 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

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

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

Другие вопросы по тегам