Программирование >>  Программирование баз данных 

1 ... 301 302 303 [ 304 ] 305 306 307 ... 346


остального кода заканчивается. Простой метод создания базы данных может включать следующий код:

private void btnCreateDB Click(object sender, EventArgs e)

Создание объекта сервера и подключение к нему ServerConnection cn = new ServerConnection(); cn.LoginSecure = true;

Server svr = new Server(cn); svr.ConnectionContext.Connect();

Database db = new Database();

db.Parent = svr; db.Name = SMODatabase ; db.Create 0;

txtResult.Text = Database Created ; cn.Disconnect();

В дгшном случае создается наиболее простой объект базы данных. После этого устанавливается связь этого объекта с определенным сервером, присваивается логическое имя базе данных, а затем создается сама база данных.

Полученный результат фактически ничем не отличается от того, который бьш бы получен после подключения к базе данных и выполнения следующей команды:

CREATE DATABASE SMODatabase

В конечном итоге будет получена пустая база данных, которая создается полностью на основе значений, заданных по умолчанию. Тем не менее можно было бы задать такие значения, как местонахождение физического файла базы данных (что привело бы к созданию файла вместе с несколькими файловыми группами), применяемая по умолчанию схема упорядочения, свойства, определяющие размер и приращение, короче говоря, все, что обычно рассматривается как свойства базы данных.

Создание таблиц

в следующем примере будет показано, как добавить несколько таблиц к пустой базе данных SMODatabase. В данном случае добавляются таблицы ParentTable HChildTable. В таблице ChildTable будет предусмотрен внешний ключ, который ссылается на таблицу ParentTable. В обеих таблицах должны быть предусмотрены первичные ключи.

Прежде всего необходимо определить ссылку на ту базу данных, в которой должны быть созданы таблицы:

private void btnCreateTables Click(object sender, EventArgs e)

Создание объекта сервера и подключение к нему ServerConnection cn = new ServerConnection(); cn.LoginSecure = true;

Server svr = new Server(cn); svr.ConnectionContext.Connect();

Получение ссылки на используемую при проверке базу данных SMO Database db = svr.Databases[ SMODatabase ];



Обратите внимание на то, что на этот раз объект Database не был создан с помощью оператора new; вместо этого данный объект был связан с существующим объектом базы данных, полученным от указанного в ссылке объекта Server.

После этого появляется возможность создавать новые объекты таблиц. Во многом аналогично тому, что происходит при создании объекта Database, все осуществляемые действия сводятся к подготовке определения объекта в приложении, но ни одна таблица не создается в базе данных до тех пор, пока не будет полностью определен объект Table pi вызван его метод Create ().

Создание объекта таблицы

Table ParentTable = new Table(db, ParentTable );

Теперь мы готовы приступить к уточнению определения таблицы. В отличие от базы данных, для которой заранее задано столько значений, применяемьгх по умолчанию, что фактически остается лишь указать имя, чтобы создать готовую к работе базу данных (к тому же многие необходимые компоненты создаваемой базы данных просто копируются из базы данных model), при подготовке определений таблиц требуется указать намного больше спецификаций, в частности, для таблицы необходимо задать по крайней мере один столбец.

Добавим столбец, который будет в конечном итоге использоваться в качестве первичного ключа:

Определение структуры таблицы

Column ParentKey = new Column(ParentTable, ParentKey ); ParentKey.DataType = DataType.Int; ParentKey.Nullable = false; ParentKey.Identity = true;

Таким образом, создан новый объект столбца. Этот объект создан по шаблону, заданному таблицей ParentTable, и назван ParentKey. Автор присвоил столбцу тип данных int, указал, что столбец не допускает NULL-значений, и определил его как столбец IDENTITY.

Но, несмотря на то, что столбец был создан по шаблону, взятому из таблицы ParentTable, еще ничего не говорит о том, что он связан именно с этой таблицей. Ссылка, обеспечивающая применение шаблонов, позволяет лишь указать, какие начальные значения свойств должны быть предусмотрены для этого столбца (такие как схема упорядочения).

Теперь добавим еще один столбец - ParentDescript ion:

Column ParentDescription = new Column(ParentTable, ParentDescription );

ParentDescription.DataType = DataType.NVarCharMax; ParentDescription.Nullable = false;

И в этом случае столбец создается, но не связывается непосредственно с объектом Table; эта связь устанавливается в следующем операторе:

Добавление других необходимых объектов к определению таблицы ParentTable.Columns.Add(ParentKey); ParentTable.Columns.Add(ParentDescription);



Таким образом, объекты столбцов становятся непосредственно связанными с объектом Table только после их добавления к коллекции Columns объекта.

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

Создание первичного ключа

Index PKParentKey = new Index(ParentTable, PKParentKey ); PKParentKey.IndexKeyType = IndexKeyType.DriPrimaryKey; PKParentKey . IndexedColumns.Add

(new IndexedColumn(PKParentKey, ParentKey ));

ParentTable.Indexes.Add(PKParentKey);

Обратите внимание на то, что первичный ключ определяется как индекс, а не как объект, явно называемый ограничением целостности. Вместо ограничения целостности определяется индекс, после чего дается указание на то, что индекс является первичным ключом (с помош;ью свойства индекса IndexKeyType). При создании индекса добавляется также определение ограничения целостности.

Во многом аналогично тому, как определяются столбцы, первичный ключ не связывается непосредственно с таблицей до тех пор, пока он не добавляется явно к коллекции Indexes рассматриваемой таблицы.

После завершения всех указанных подготовительных действий можно приступить к созданию таблицы:

ParentTable.Create();

Таблица физически создается в базе данных именно в этот момент.

Итак, родительская таблица создана, поэтому мы можем заняться добавлением дочерней таблицы. Весь предназначенный для этого код, вплоть до кода создания первичного ключа, в основном аналогичен тому, который применялся для создания объекта ParentTable:

Создание объекта дочерней таблицы

Table ChildTable = new Table(db, ChildTable );

Определение структуры дочерней таблицы

Column ChildParentKey = new Column(ChildTable, ParentKey ); ChildParentKey.DataType = DataType.Int; ChildParentKey.Nullable = false;

Column ChildKey = new Column(ChildTable, ChildKey ); ChiIdKey.DataType = DataType.Int; ChildKey.Nullable = false;

Column ChildDescription = new Column(ChildTable, ChildDescription ); ChiIdDescription.DataType = DataType.NVarCharMax; ChildDescription.Nullable = false;

Добавление других необходимых объектов к определению таблицы ChildTable.Columns.Add(ChildParentKey); ChildTable.Columns.Add(ChildKey); ChildTable.Columns.Add(ChildDescription);

Создание составного первичного ключа

Index PKChildKey = new Index(ChildTable, PKChildKey ); PKChildKey.IndexKeyType = IndexKeyType.DriPrimaryKey;

PKChildKey. IndexedColumns. Add (new IndexedColumn (PKChildKey, ParentKey ));



1 ... 301 302 303 [ 304 ] 305 306 307 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика