Как создать базу данных Microsoft Jet (Access) без сборки взаимодействия? - PullRequest
5 голосов
/ 01 октября 2008

Мне нужно создать базу данных доступа (mdb) без использования сборки взаимодействия ADOX.

Как это можно сделать?

Ответы [ 5 ]

10 голосов
/ 01 октября 2008

Прежде чем я выбрасываю этот код, он может также жить в стеке

Кажется, что-то в этом роде помогает:

if (!File.Exists(DB_FILENAME))
{
    var cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DB_FILENAME;

    // Use a late bound COM object to create a new catalog. This is so we avoid an interop assembly. 
    var catType = Type.GetTypeFromProgID("ADOX.Catalog");
    object o = Activator.CreateInstance(catType);
    catType.InvokeMember("Create", BindingFlags.InvokeMethod, null, o, new object[] {cnnStr});

    OleDbConnection cnn = new OleDbConnection(cnnStr);
    cnn.Open();
    var cmd = cnn.CreateCommand();
    cmd.CommandText = "CREATE TABLE VideoPosition (filename TEXT , pos LONG)";
    cmd.ExecuteNonQuery();

}

Этот код иллюстрирует, что вы можете получить доступ к базе данных с помощью OleDbConnection после ее создания с помощью компонента COM ADOX.Catalog.

1 голос
/ 01 октября 2008

Я сделал то же самое, что и Ауцин, создал базу данных Access и включил ее в свой проект в качестве управляемого ресурса. Оказавшись там, он включается в скомпилированный код, и вы можете копировать его на жесткий диск столько раз, сколько захотите. Пустые базы данных также относительно малы, поэтому накладных расходов не так много.

Дополнительным бонусом является возможность настроить базу данных, если вы знаете, как она будет использоваться или какие таблицы будут добавляться каждый раз, вы можете уменьшить объем кодирования и медленные запросы к базе данных.

0 голосов
/ 06 июля 2013

ACE - это не ни в одной структуре (пока. Т.е. не в 1, 2, 3,5, 4, 4,5)

Он также не является частью Центра обновления Windows.

JET4 - это в Framework2 и выше.

Если вы работаете с файлами Access / MDB и т. Д., Не думайте, что ACE присутствует.

0 голосов
/ 01 октября 2008

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

0 голосов
/ 01 октября 2008

Вам не нужен установленный Jet (основная головная боль), если вы используете эту строку подключения в .net 3.5

Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\myFolder\myAccess2007file.accdb;Persist
Security Info=False;

Это должно работать при доступе 2007 и ниже

...