Руководство по работе с БД Firebird с использованием библиотеки ADO .Net 2.0

       

DDL запросы. CREATE/ALTER/DROP


Данный вид запросов позволяет управлять метаданными БД. Вы можете создавать, удалять и модифицировать колонки, таблицы и целые базы данных через 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();




con.Close();

return new OleDbConnection( CreateConnectionStringBuilderForSample().ToString()); }

И, наконец, законченный пример, который сначала удаляет базу данных, потом создает на её месте новую и определяет в ней две таблицы, связанные внешним ключом:

public void CreateNewDBSample() { DropDatabase();

OleDbConnection con = CreateDatabase(); con.Open(); OleDbTransaction trans = con.BeginTransaction();

//создаем таблицу SAMPLE_TABLE с двумя колонками

ExecuteDDL( "CREATE TABLE SAMPLE_TABLE( " + //int column " ID INTEGER NOT NULL, " + //varchar column

" NAME VARCHAR(64), " + //primary key

"CONSTRAINT PK_SAMPLE_TABLE PRIMARY KEY(ID) )", trans);

//создаем SAMPLE_TABLE_2 связанную через FOREIGN KEY ExecuteDDL( "CREATE TABLE SAMPLE_TABLE_2 ( " + " ID INTEGER NOT NULL, " + //int columns

" PARENT INTEGER NOT NULL, " + //int column

"CONSTRAINT PK_SAMPLE_TABLE_2 PRIMARY KEY(ID), " + //primary key

"CONSTRAINT FK_SAMPLE_TABLE_PARENT " + //foreign key

"FOREIGN KEY(PARENT) REFERENCES SAMPLE_TABLE(ID))", trans);

trans.Commit(); con.Close(); }


Содержание раздела