Данный вид запросов позволяет управлять метаданными БД. Вы можете создавать, удалять и модифицировать колонки, таблицы и целые базы данных через SQL выражения, в тексте которых содержатся DDL-инструкции. Если применять их совместно со схемами метаданных, то можно без особых усилий копировать структуры существующих баз данных и создавать новые.
Все DDL запросы, за исключением CREATE DATABASE и DROP DATABASE, могут выполняться как в режиме автоматического подтверждения, так и в контексте транзакции. По умолчанию фиксирование изменений произведенных DDL запросами отключено. Это сделано из соображений безопасности. Для того, чтобы включить подтверждение DDL запросов, необходимо установить свойство auto_commit_ddl. Его описание есть в разделе «Методы подключения к базе данных» этой статьи.
Приведу пример использования DROP DATABASE для удаления базы данных:
private void DropDatabase() { if (File.Exists(databasePath)) { OleDbConnectionStringBuilder builder = CreateConnectionStringBuilderForSample();
//отключаем использование пула для этого подключения
builder.OleDbServices = OleDbServicesValues.EnableAll & ~OleDbServicesValues.ResourcePooling;
OleDbConnection con = new OleDbConnection(builder.ToString()); con.Open();
new OleDbCommand("drop database",con).ExecuteNonQuery(); con.Close(); } }
Обратите внимание на то, что для подключения, которое будет использоваться для удаления базы данных, мы отключили использование пула ресурсов. IBProvider умеет информировать сервисы Ole Db о ставших недоступными подключениях и в данном случае это действие является избыточным. Но оно оставлено здесь для решения возможных проблем при использовании Ole Db провайдеров других производителей.
Теперь DDL для создания новой базы данных:
private OleDbConnection CreateDatabase() { //подключение к существующей бд employee.gdb
OleDbConnection con = ConnectionProvider.CreateConnection(); con.Open();
//создание новой базы данных
new OleDbCommand( "create database '" + server_name + ":" + databasePath + "'\n" + "USER '" + user_name + "' \n" + "PASSWORD '" + password + "' \n", con).ExecuteNonQuery();