|
Программирование >> Программирование баз данных
PKC3iildKey. IndexedColurans .Add (new IndexedColumn (PKC3iildKey, C3iildKey )) ; ChildTable.Indexes.Add(PKChildKey); Ho к таблице ChildTable предъявляется дополнительное требование, поскольку в ней должен быть предусмотрен внешний ключ. Для этого необходимо создать объект ForeignKey: Создание внешнего ключа ForeignKey FKParent = new ForeignKey(ChildTable, FKParent ); Затем следует создать объект ForeignKeyColumn, предназначенный для добавления к объекту ForeignKey: в приведенном ниже определении первое значение ParentKey представляет собой имя текущей таблицы. А второе значение соответствует имени таблицы, упомянутой в ссьшке (или только столбцу) ForeignKeyColumn FKParentParentKey = new ForeignKeyColumn(FKParent, ParentKey , ParentKey ); FKParent.Columns.Add(FKParentParentKey); После этого зададим ссылку на конкретную таблицу: FKParent.ReferencedTable = ParentTable ; Можно бьшо бы также задать конкретную схему, но таблица создана с применением лишь схемы, заданной по умолчанию, поэтому и данная таблица ссьшается на эту схему. Таблица может быть создана с применением той схемы, которая по умолчанию задана для текущего пользователя /* Следует отметить, что в этом коде можно бьшо бы также определить ** некоторые другие свойства, наподобие действий CASCADE, но в целях ** упрощения примера этого решено не делать */ Вслед за этим остается лишь добавить внешний ключ и создать таблицу: ChildTable.ForeignKeys.Add(FKParent); ChildTable.Create(); cn.Disconnect(); txtResult.Text = Tables Created ; Автор согласен с возможным возражением, что этот способ может показаться более сложным по сравнению с подключением и передачей на вьшолнение оператора CREATE TABLE, но он имеет несколько преимуществ, описанных ниже. Если таблица создается динамически, то предоставляется более удобная возможность детализировать различные этапы создания таблицы иначе, чем при попытке решить эту задачу путем подготовки оператора создания таблицы с помощью манипуляций со строками. Рассматриваемый способ позволяет вносить изменения в свойства различных объектов, применяемых при создании таблицы, а это связано с гораздо меньшими ограничениями при выборе конкретной последовательности вьшолнения отдельных этапов, чем при попытке сформировать строку с текстом оператора создания таблицы. Все свойства остаются обозримыми, поэтому их можно легко проверить и отредактировать, не проводя снова и снова сложные манипуляции со строками. Именно в этом и заключаются преимущества модели SMO - если другие необходимые действия уже реализованы с помощью модели SMO, то дальнейшее продолжение операций с помощью SMO требует гораздо меньших усилий со стороны разработчика, чем при попытке чередования текстовых команд с командами SMO. Удаление базы данных Как и при использовании обычных операторов удаления, задача удаления базы данных с помощью модели SMO является довольно несложной. Для этого вначале необходимо задать информацию о сервере и соединении по уже известному нам принципу, а затем определить ссылку на интересующую нас базу данных: private void btnDropDB Click(object sender, EventArgs e) Создание объекта сервера и подключение к нему ServerConnection cn = new ServerConnectionО; cn.LoginSecure = true; Server svr = new Server(cn); svr.ConnectionContext.Connect(); Database db = svr.Databases[ SMODatabase ]; После этого достаточно вызвать метод Drop О , и операция удаления базы данньгх будет выполнена: db.Drop(); txtResult.Text = Database Dropped ; cn.Disconnect 0; Обратите внимание на то, что в приведенном выше примере отсутствуют какие-либо средства перехвата сообщений об ошибках (поскольку фактически не требуются какие-либо особые действия по сравнению с обычнымр! операциями перехвата ошибок, применяемыми в современных языках программирования). С определенными проблемами при удалеш1и базы данных приходится сталкиваться, если все еще остаются открытыми какие-либо соединения с этой базой данных в другом компоненте текущего приложения или в других приложениях (таких как Management Studio). Резервное копирование базы данных Автор фактически намеревается в этом разделе перейти от используемой базы данных к базе данных AdventureWorks, исключительно для того, чтобы полученная резервная копия была более весомой. Выше в данной главе уже были описаны многие разные объекты, но объект Backup требует отдельного описания. Объект Backup рассматривается как дочерний по отношению к объекту Server, но имеет собственный набор свойств и методов. При создании резервной копии применяется тот же код соединения с сервером, который уже неоднократно рассматривался в данной главе: private void btnBackupDB Click(object sender, EventArgs e) Создание объекта сервера и подключение к нему ServerConnection cn = new ServerConnectionО; СП.LoginSecure = true; Server svr = new Server(cn); svr.ConnectionContext.Connect(); После вьшолнения этого кода можно приступить к созданию нового объекта Backup. Следует отметить, что в отличие от объекта Database, который ассоциируется с сервером на ранних этапах, не требуется предусматривать ссылку на конкретный объект, чтобы создать объект Backup, до тех пор, пока не происходит фактический переход к выполнению резервного копирования. Создание и определение объекта резервной копии Backup bkp = new Backup(); bkp.Action = BackupActionType.Database; bkp.Database = AdventureWorks ; bkp.Devices.AddDevice(@ c:\SMOSMOSample.bak , DeviceType.File); В приведенном выше фрагменте кода был создан объект Backup и передано указание этому объекту, какого рода резервная копия должна быть выполнена с его помо-ш;ью (в данном случае речь идет о резервном копировании базы данных. Database, а не, допустим, журнала. Log). Кроме того, было указано, какая база данных должна быть зарезервирована и какое устройство должно для этого использоваться. Следует отметить, что в данном случае файловое устройство и путь были определены динамически, но можно столь же успешно подключиться к серверу, определить с помощью запроса, какие устройства уже заданы для этого сервера, а затем выбрать одно из этих устройств как предназначенное для хранения резервной копии. Наряду с этим может быть указано устройство другого типа, такое как магнитная лента. С этого момента мы готовы приступить к выполнению резервного копирования. Для этого могут применяться два метода, описанных ниже. SqlBackup. Это метод синхронного резервного копирования, при использовании которого управление не возвраш;ается в код до тех пор, пока резервное копирование не будет завершено или отменено из-за ошибки. SqlBackupAsync. Этот метод позволяет передать серверу указание, что нужно начать резервное копирование, а затем передать управление конкретному приложению сразу после того, как сервер примет к выполнению запрос на резервное копирование как допустимый (после этого резервное копирование
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |