powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Создать/Сжать БД Access
7 сообщений из 7, страница 1 из 1
Создать/Сжать БД Access
    #32771615
_relib_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.
Подскажите, пожалуйста, как программно а) создать, б) сжать базу данных Access ?
Заранее спасибо
...
Рейтинг: 0 / 0
Создать/Сжать БД Access
    #32771616
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для создания - импортруй в проект Microsoft ADO Ext. for DDL and Security и вызови Catalog.Create

есть еще один способ - через Reflection
(работает чуть медленнее, но не надо ничего подключать к проекту)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public string CreateMdb(string path, bool overwrite)
{
  string ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\""+path+"\";";
  object ax=null;    // объект ADOX.Catalog
  bool   mdb_exists; 
			
  try
  { // проверить существование mdb файла
    if((mdb_exists=File.Exists(path)) && !overwrite) return(ConnectionString);
    if(mdb_exists) File.Delete(path);
    // создать объект ADOX.Catalog
    Type tx=Type.GetTypeFromProgID("ADOX.Catalog");
    ax=Activator.CreateInstance(tx);
    // создать mdb БД
    tx.InvokeMember("Create", BindingFlags.InvokeMethod, null, ax, new object[]{ConnectionString});
  }
  catch(Exception ex)
  { // обработка ошибок
    ConnectionString=string.Empty;
  }
  finally
  { if(ax!=null) Marshal.ReleaseComObject(ax);
    ax=null;
  }
  return(ConnectionString);
}
...
Рейтинг: 0 / 0
Создать/Сжать БД Access
    #32771617
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сжатие БД Access - тоже reflection :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
// How To Compact Microsoft Access Database Through ADO
// http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q230501

public bool CompressMdb(string path)
{	
  string temp1="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\""+path+"\";";
  string file =Path.GetTempFileName(); // файл для временной БД
  string temp2="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\""+file+"\";";
  object je=null; // объект JRO.JetEngine
  bool   ok=true; // код завершения сжатия БД
			
  try
  { //создать Microsoft Jet Replication Object
    Type tj=Type.GetTypeFromProgID("JRO.JetEngine");
    je=Activator.CreateInstance(tj);
				
    OleDbConnection.ReleaseObjectPool(); 
    if(File.Exists(file)) File.Delete(file); // удалить временный файл, созданный GetTempFileName();
    // сжать базу данных -> и копировать ее во временный файл
    tj.InvokeMember("CompactDatabase", BindingFlags.InvokeMethod, null, je, new object[]{temp1, temp2});
			
    // вот здесь нужно очень аккуратно:
    temp1=path+".bak";      // имя резервной копии БД
    if(File.Exists(temp1)) File.Delete(temp1);
    File.Move(path, temp1); // делаем резервную копию БД (переименование файла без копирования)
    File.Move(file, path);  // копировать сжатую/временную БД
    if(File.Exists(temp1)) File.Delete(temp1);
  }
  catch(Exception ex)		
  { /* обработка ошибок */
    ok=false; // облом
  }
  finally
  { if(je!=null) Marshal.ReleaseComObject(je);
    je=null;
  }
  return(ok);
}
...
Рейтинг: 0 / 0
Создать/Сжать БД Access
    #32985211
anton_gis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кузядля создания - импортруй в проект Microsoft ADO Ext. for DDL and Security и вызови Catalog.Create

есть еще один способ - через Reflection
(работает чуть медленнее, но не надо ничего подключать к проекту)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public string CreateMdb(string path, bool overwrite)
{
  string ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\""+path+"\";";
  object ax=null;    // объект ADOX.Catalog
  bool   mdb_exists; 
			
  try
  { // проверить существование mdb файла
    if((mdb_exists=File.Exists(path)) && !overwrite) return(ConnectionString);
    if(mdb_exists) File.Delete(path);
    // создать объект ADOX.Catalog
    Type tx=Type.GetTypeFromProgID("ADOX.Catalog");
    ax=Activator.CreateInstance(tx);
    // создать mdb БД
    tx.InvokeMember("Create", BindingFlags.InvokeMethod, null, ax, new object[]{ConnectionString});
  }
  catch(Exception ex)
  { // обработка ошибок
    ConnectionString=string.Empty;
  }
  finally
  { if(ax!=null) Marshal.ReleaseComObject(ax);
    ax=null;
  }
  return(ConnectionString);
}

попробовал через Reflection. Открываю базу, пишет нераспознаваемый формат базы :(
Как исправить???
...
Рейтинг: 0 / 0
Создать/Сжать БД Access
    #32985501
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй в строке подключения указать одно из след. значений:

Jet OLEDB:Engine Type=3; // для Access 2
Jet OLEDB:Engine Type=4; // для Access 95, 97
Jet OLEDB:Engine Type=5; // для Access 2000 и выше
...
Рейтинг: 0 / 0
Создать/Сжать БД Access
    #32987540
anton_gis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кузяпопробуй в строке подключения указать одно из след. значений:

Jet OLEDB:Engine Type=3; // для Access 2
Jet OLEDB:Engine Type=4; // для Access 95, 97
Jet OLEDB:Engine Type=5; // для Access 2000 и выше
спасибо, получилось :)
...
Рейтинг: 0 / 0
Создать/Сжать БД Access
    #33042084
Еще пример в ту же тему...
Код: plaintext
1.
2.
3.
4.
5.
ADOX.Catalog adoxCatalog = new ADOX.CatalogClass();
adoxCatalog.Create(AConnectionString);
object adoConnection = adoxCatalog.ActiveConnection;
adoConnection.GetType().InvokeMember(
        "Close", BindingFlags.InvokeMethod, null, adoConnection, new object[ 0 ]);
adoxCatalog = null;
Обратите внимание - соединение нужно закрывать! иначе оно останется открытым пока COM-объект каталога не будет освобожден сборщиком мусора.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Создать/Сжать БД Access
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]