Как создать базу данных 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-разрядных компонентов.