Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в C# создать файл .mdb? Как в C# создать файл Access 
:(
    Опции темы
tamasa
Дата 11.6.2008, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 11.6.2008

Репутация: нет
Всего: нет



Хочу с помощью c# создать БД и обращаться к ней через формочку c#.

Соответственно, нужно:

Создать файл .mdb (Microsoft Access Data Base)

а потом открывать файл .mdb и работать с базой (делать селекты, апдейты, делиты и т.д.)

PM MAIL   Вверх
_hunter
Дата 11.6.2008, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 2
Всего: 98



Не стесняйся перед созданием темы пользоваться поиском...
http://forum.vingrad.ru/forum/topic-117094.html
http://forum.vingrad.ru/forum/topic-29461.html


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Rififi
Дата 11.6.2008, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



tamasa
из рабочего кода:

Код
        /// <summary>
        /// Создать пустую базу данных с необходимой структурой
        /// </summary>
        /// <param name="fileName">Имя mdb-файла</param>
        /// <param name="accessDb">Стуктура создаваемой базы даных</param>
        /// <returns>Обьект DbConnection для созданной базы данных</returns>
        protected DbConnection GenerateAccessDataBase(String fileName, AccessDataBase accessDb)
        {
            // файл не должен существовать к моменту создания БД
            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }

            // сформировать connection string
            String cnnString = GetConnectionStringForAccess(fileName);
            
            // создать пустую БД
            ADOX.Catalog catalog = new ADOX.Catalog();
            catalog.Create(cnnString);
            
            // цикл по каждой создаваемой таблице
            foreach(AccessTable accessTable in accessDb.Tables)
            {
                // создать access-таблицу с именем name и пустым набором полей
                ADOX.Table table = new ADOX.Table();
                table.ParentCatalog = catalog;
                table.Name = accessTable.Name;                

                // добавить в таблицу требуемые поля
                foreach(TableColumn field in accessTable.Columns)
                {
                    table.Columns.Append(field.Name, field.Type, field.Size);
                    // если есть свойства для этого поля, добавим их
                    foreach(ColumnProperty prop in field.Properties)
                    {
                        table.Columns[field.Name].Properties[prop.Name].Value = prop.Value;
                    }
                }

                // добавить в таблицу требуемые индексы
                foreach (TableIndex index in accessTable.Indexes)
                {
                    ADOX.Index axIndex = new ADOX.Index();                    
                    axIndex.Name = index.Name;
                    axIndex.PrimaryKey = index.PrimaryKey;
                    axIndex.Unique = index.Unique;
                    axIndex.IndexNulls = ADOX.AllowNullsEnum.adIndexNullsDisallow;
                    // для каждого индекса, добавить колонки, с которыми он связан                    
                    foreach (String colName in index.Columns)
                    {
                        TableColumn col = accessTable.Columns[colName];
                        axIndex.Columns.Append(col.Name, col.Type, col.Size);
                    }
                    table.Indexes.Append(axIndex, null);
                    Marshal.ReleaseComObject(axIndex);
                }
                // таблица сформирована, добавить её в каталог
                catalog.Tables.Append(table);
                Marshal.ReleaseComObject(table);
            }
            
            // закрыть соединение с созданной базой данных, используюя Reflection
            catalog.ActiveConnection.GetType().InvokeMember(
                "Close", BindingFlags.InvokeMethod, null,
                catalog.ActiveConnection, new Object[0]);
            Marshal.ReleaseComObject(catalog);

            log.Debug("mdb created");

            // вернуть соединение с только что созданной БД
            return GetConnectionForAccess(cnnString);
        }



AccessDataBase - структура, описывающая базу данных (таблицы, ключ, индексы...)
у тебя будет что-то аналогичное.

Код

            AccessDataBase db = new AccessDataBase(
                new AccessTable("Images",
                    new TableColumn[]
                    {    
                        new TableColumn(MDB_Id, ADOX.DataTypeEnum.adInteger, 0, 
                            new ColumnProperty("Autoincrement", true)),
                        new TableColumn(MDB_IdOrig, ADOX.DataTypeEnum.adInteger, 0),
                        new TableColumn(MDB_FilePath, ADOX.DataTypeEnum.adVarWChar, 0),
                        new TableColumn(MDB_FileName, ADOX.DataTypeEnum.adVarWChar, 0),
                        new TableColumn(MDB_FileDate, ADOX.DataTypeEnum.adVarWChar, 20),
                        new TableColumn(MDB_FileTime, ADOX.DataTypeEnum.adVarWChar, 20),
                        new TableColumn(MDB_FileSize, ADOX.DataTypeEnum.adInteger, 0),
                        new TableColumn(MDB_Res, ADOX.DataTypeEnum.adInteger, 0)
                    },
                    new TableIndex[]
                    {
                        new TableIndex("id_index", true, true, MDB_Id),
                        new TableIndex("fullpath_index", false, true, MDB_FilePath, MDB_FileName)
                    }
                )
            );


PM MAIL   Вверх
ProgerIv
Дата 3.9.2008, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 19.8.2008

Репутация: нет
Всего: нет



Что надо подключить, чтобы AccessDataBase использовать?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0923 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.