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

1 ... 303 304 305 [ 306 ] 307 308 309 ... 346


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

Очевидно, что в рассматриваемом примере выбран метод асинхронного резервного копирования:

Запуск процедуры резервного копирования. Применяемый метод имеет суффикс Async и обеспечивает асинхронное выполнение операции, но можно было бы с таким же успехом воспользоваться синхронным режимом с применением метода SqlBackup bkp.SqlBackupAsync(svr);

СП.Disconnect();

После выполнения описанных действий ознакомьтесь с файлом SQLSMOSam-ple. bak в корневом каталоге диска С: и убедитесь в том, что он там имеется.

Сценарная поддержка

По-видимому, одной из наиболее привлекательных возможностей модели SMO, благодаря которой разработчик базы данных становится буквально всемогущим, является способность формировать сценарии создания объектов, которые уже находятся в базе данных. Но на этом указанные возможности не исчерпываются, поскольку модель SMO позволяет представлять в виде сценариев резервные копии, обеспечивать обратное проектирование таблиц и даже регистрировать в файле операторы, передаваемые на сервер.

Рассмотрим пример создания по методу обратного проектирования сценария для таблицы HumanResources. Employee базы данных AdventureWorks. Этот пример позволяет убедиться в том, насколько легко можно представить в виде сценария даже относительно сложное определение таблицы, чтобы обеспечить применение этого сценария для других целей.

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

private void btnScript Click(object sender, EventArgs e)

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

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

Определение базы данных, в которой будет находиться таблица, ссылающаяся на рассматриваемую таблицу Database db = svr.Databases[ AdventureWorks ];

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



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

Получение ссылки на таблицу. Следует отметить, что схема фактически определяется вторым параметром, а не первым Table Employee = db.Tables[ Employee , HumanResources ];

После этого мы можем вызвать метод Script (). Единственная реальная сложность при использовании этого метода состоит в том, что нужно подготовиться к получению не отдельной строки, а скорее коллекции строк. Для получения коллекции строк необходимо предусмотреть переменную подходящего типа StringCollection, которая не определена ни в одном из используемых нами объявлений, поэтом) объявление этой переменной должно быть полностью уточненным:

Вызов метода Script. Проблема состоит в том, что он возвращает коллекцию строк, а не строку. Далее будет показано, как преобразовать эту коллекцию в строку

System.Collections.Specialized.StringCollection script = Errployee.Script();

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

string MyScript = ;

foreach (string s in script)

MyScript = MyScript + s;

Демонстрация полученных результатов, которая является весьма впечатляющей MessageBox.Show(MyScript);

СП.Disconnect();

После вызова приведенного выше кода на выполнение в окне отобразится вполне приемлемый сценарий, как показано на рис. 25.2.

SET ANSI NULLS ONSET QUOTED IDENTIFIER ONCREATE TABLE [HumanResources],[Employee]( lEmployeerD] [int] IDENTITY(1,1) NOT NULL,

[WationallDNumber] [nvarcharKlS) COLLATE 5Ql Latinl GenefaLCPl CI A5 NOT NULL, [ContactID] [int] NOT NULL

[LoginID] [nvarcharX256) COLLATE SQL Latinl GeneraLCPl CI A5 NOT NULL, [ManagerlD] [int] NULL,

[Title] [nvarchdr](SO) COLLATE SQL Latinl GenerdLCPi CI AS NOT NULL, [BirlhDate] [datetime] ШТ NULL,

[MaritalStatus] [nchar](l) COLLATE SQLL3tril GeneraLCPl CLAS NOT NULL, [Gender] [nchar]a) COLLATE SQL LatJni,GeneraLCPl C: AS NOT NULL, [HireDate] [datetime] NOT NULL, [SalariedFlag] [dbo].[Flag] NOT NULL, [VacationHours] [smalfint] NOT NLIL, [SickLeaveHours] [smallint] NOT NULL, [CurrentFlag][dbo].[Ff3g] NOT NLIL, [rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL, [ModifiedDate] [datetime] NOT NULL ) ON [PRIMARY]

Puc. 25.2. Сценарий создания таблицы



Объединение отдельных описанных компонентов в единое приложение

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

Безусловно, пользовательский интерфейс этого приложения может быть оформлен по-разному, но автор решил применить интерфейс в виде формы, приведенной на рис. 25.3.

J SMO Examph

SMO DB Stuff

CREATEDB

I CREATE Tabb I DROPDB

AdventureWorks Stuff

I Script Employee I Backup DB

Puc. 25.3. Пользовательский интерфейс приложения

О том, для чего предназначены отдельные кнопки, которые определены в коде, можно догадаться, ознакомившись с их именами. В нижней части формы находится текстовое поле, которое именуется в коде как txtReturn.

Ниже приведен весь код формы, using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Microsoft.SqlServer.Management.Smo;

using Microsoft.SqlServer.Management.Common;

namespace SQLSMOSample

public partial class frmMain : Form

public frmMain0



1 ... 303 304 305 [ 306 ] 307 308 309 ... 346

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