Пошаговое руководство. Создание пользовательского генератора данных для проверочного ограничения
Стандартные генераторы данных можно использовать для заполнения данными столбцов в Visual Studio Premium или Visual Studio Ultimate. Если для столбца, который требуется заполнить, определено проверочное ограничение, то данные, которыми он заполняется, должны удовлетворять этому ограничению. Стандартные генераторы данных позволяют создавать данные, удовлетворяющие многим проверочным ограничениям. Например, если имеется проверочное ограничение, требующее, чтобы данные находились в определенном диапазоне, можно воспользоваться стандартным генератором DateTime и задать свойства Min и Max в соответствии с этим проверочным ограничением.
Однако стандартные генераторы данных не позволяют создавать данные, удовлетворяющие всем проверочным ограничениям. Например, если проверочное ограничение требует, чтобы дата попадала в один из двух раздельных диапазонов, стандартный генератор DateTime использовать нельзя. В данном пошаговом руководстве будет рассмотрено создание пользовательского генератора данных, который удовлетворяет требованиям подобного ограничения. Этот генератор принимает в качестве входных данных два диапазона и создает случайную дату, которая попадает в один из этих диапазонов.
В данном пошаговом руководстве выполняются следующие задачи.
Создание класса, производного от Generator.
Создайте входные свойства, которые позволяют пользователю задать два диапазона дат.
Создайте выходное свойство, используемое как выходные данные генератора.
Переопределите метод OnInitialize, чтобы инициализировать объекты Random и сделать делегат детерминированным.
Переопределите метод OnGenerateNextValues для создания данных.
Подпишите генератор строгим именем.
Обязательные компоненты
Для выполнения инструкций этого пошагового руководства потребуется установить Visual Studio Premium или Visual Studio Ultimate.
Создание класса пользовательского генератора данных
Создание пользовательского генератора данных следует начать с создания библиотеки классов.
Создание класса пользовательского генератора данных
В Visual Studio создайте проект библиотеки классов на языке, который предпочитаете, и назовите этот проект GeneratorDateRanges.
В меню Проект щелкните команду Добавить ссылку.
Выберите вкладку .NET.
В столбце Имя компонента найдите расположение следующих компонентов:
[Microsoft.Data.Schema]
[Microsoft.Data.Schema.Sql]
[Microsoft.Data.Schema.Tools]
Совет
Для выбора нескольких компонентов при нажатии кнопки мыши удерживайте клавишу CTRL.
Нажмите кнопку OK, после того как выберите все нужные компоненты.
Выбранные ссылки будут отображаться в окне обозревателя решений в узле Ссылки.
(Необязательно, только Visual Basic.) В обозревателя решений щелкните Показать все файлы и разверните узел Ссылки, чтобы проверить новую ссылку.
Откройте файл Class1, а затем в верхней части окна Код перед объявлением класса добавьте следующие строки кода:
Imports System.Data.SqlTypes Imports Microsoft.Data.Schema.Tools.DataGenerator Imports Microsoft.Data.Schema.Extensibility Imports Microsoft.Data.Schema Imports Microsoft.Data.Schema.Sql
using System.Data.SqlTypes; using Microsoft.Data.Schema.Tools.DataGenerator; using Microsoft.Data.Schema.Extensibility; using Microsoft.Data.Schema; using Microsoft.Data.Schema.Sql;
Переименуйте класс из Class1 в GeneratorDateRanges и укажите, что этот класс наследует класс Generator.
Предупреждение
По умолчанию присвоенное классу имя отображается в списке в столбце Генератор в окне Сведения о столбцах.Следует задать имя, не конфликтующее с именем стандартного генератора или другого пользовательского генератора.
Public Class GeneratorDateRanges Inherits Generator End Class
public class GeneratorDateRanges: Generator { }
Добавьте DatabaseSchemaProviderCompatibilityAttribute, как показано в следующем примере:
<DatabaseSchemaProviderCompatibility(GetType(SqlDatabaseSchemaProvider))> _ Public Class GeneratorDateRanges Inherits Generator End Class
[DatabaseSchemaProviderCompatibility(typeof(SqlDatabaseSchemaProvider))] public class GeneratorDateRanges : Generator { }
Дополнительные сведения об атрибуте совместимости расширений см. в разделе Расширение функций баз данных в Visual Studio.
В меню Файл выберите команду Сохранить все.
Добавление входных свойств
Этот пользовательский генератор данных принимает в качестве входных данных два диапазона дат. Чтобы задать каждый диапазон, пользователь указывает его минимальную и максимальную дату. Поэтому в итоге необходимо создать для входных свойств две минимальные даты и две максимальные.
Добавление входных свойств
Создайте четыре переменных-элемента для хранения минимальной и максимальной дат для двух диапазонов дат:
Dim range1MinValue As SqlDateTime Dim range1MaxValue As SqlDateTime Dim range2MinValue As SqlDateTime Dim range2MaxValue As SqlDateTime
SqlDateTime range1MinValue; SqlDateTime range1MaxValue; SqlDateTime range2MinValue; SqlDateTime range2MaxValue;
Создайте четыре свойства для задания минимальной и максимальной дат для двух диапазонов дат. Эти свойства должны иметь InputAttribute для их идентификации как входных свойств.
Примечание
Чтобы задать входные свойства для этого генератора данных в окне свойств, необходимо предоставить преобразователь типа, который преобразует входные значения в тип и из типа SqlDateTime.Для этого позже, при выполнении данного пошагового руководства, нужно будет добавить вспомогательный класс SqlDateTimeConverter.
<Input(TypeConverter:=GetType(SqlDateTimeConverter))> _ Public Property Range1Min() as SqlDateTime <Input(TypeConverter:=GetType(SqlDateTimeConverter))> _ Public Property Range1Max() as SqlDateTime <Input(TypeConverter:=GetType(SqlDateTimeConverter))> _ Public Property Range2Min() as SqlDateTime <Input(TypeConverter:=GetType(SqlDateTimeConverter))> _ Public Property Range2Max() as SqlDateTime
[Input(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range1Min { set {range1MinValue = value;} get {return range1MinValue;} } [Input(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range1Max { set {range1MaxValue = value;} get {return range1MaxValue;} } [Input(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range2Min { set {range2MinValue = value;} get {return range2MinValue;} } [Input(TypeConverter = typeof(SqlDateTimeConverter))] public SqlDateTime Range2Max { set {range2MaxValue = value;} get {return range2MaxValue;} }
В меню Файл выберите команду Сохранить все.
Свойство выходного свойства
Этот пользовательский генератор данных возвращает в качестве выходных данных одну случайную дату. Поэтому необходимо создать одно выходное свойство.
Добавление выходного свойства
Создайте переменную элемента для хранения случайной даты, которая является выходным значением:
Dim randomDateValue As SqlDateTime
SqlDateTime randomDateValue;
Создайте свойство, возвращающее в качестве выходного значения случайную дату. Это свойство должно иметь OutputAttribute, чтобы его можно было идентифицировать как выходное свойство.
<Output()> _ Public ReadOnly Property RandomDate() As SqlDateTime Get Return randomDateValue End Get End Property
[Output] public SqlDateTime RandomDate { get {return randomDateValue;} }
В меню Файл выберите команду Сохранить все.
Переопределение метода OnInitialize
При создании случайных данных они могут быть как детерминированными, так и недетерминированными. В детерминированных данных одни и те же данные повторяются каждый раз при их создании с использованием одинакового начального значения. Все генераторы данных имеют свойство Seed, значение которого может задать пользователь. Чтобы задать начальное значение для объектов Random и сделать генератор детерминированным, переопределите метод OnInitialize.
Переопределение метода OnInitialize
Создайте две переменных-члена для создания случайных чисел, как показано в следующем примере. Одна переменная создает случайную дату. Другая переменная случайным образом выбирает между двумя возможными случайными диапазонами.
Dim random As Random Dim randomRange As Random
Random random; Random randomRange;
Переопределите метод OnInitialize:
Protected Overrides Sub OnInitialize(ByVal initInfo As GeneratorInit) random = New Random(Me.Seed) 'deterministic randomRange = New Random(Me.Seed) 'deterministic 'random = New Random() 'non-deterministic 'randomRange = New Random() 'non-deterministic MyBase.OnInitialize(initInfo) End Sub
protected override void OnInitialize(GeneratorInit initInfo) { random = new Random(this.Seed); //deterministic randomRange = new Random(this.Seed); //deterministic //random = new Random(); //non-deterministic //randomRange = new Random(); //non-deterministic base.OnInitialize(initInfo); }
В меню Файл выберите команду Сохранить все.
Переопределение метода OnGenerateNextValues
Visual Studio Premium вызывает метод OnGenerateNextValues генератора для создания необходимых данных. Чтобы задать логику создания данных для выходного свойства, необходимо переопределить этот метод.
Переопределение метода OnGenerateNextValues
Переопределите метод OnGenerateNextValues, как показано в следующем примере.
Protected Overrides Sub OnGenerateNextValues() Dim min As SqlDateTime Dim max As SqlDateTime 'Generate a random date from either range 1 or range 2. 'Randomly select either range 1 or range 2 by randomly 'generating an odd or an even random number. '------------------------------------------------------------ If randomRange.Next() Mod 2 = 0 Then 'check for odd or even min = range1MinValue max = range1MaxValue Else min = range2MinValue max = range2MaxValue End If 'The formula for creating a random number in a specific range is: 'start of range + (size of range * random number between 0 and 1) 'size of range Dim range As TimeSpan = max.Value - min.Value '(size of range * random number between 0 and 1) Dim randomNumber As TimeSpan = New TimeSpan(CLng(range.Ticks * random.NextDouble())) 'start of range + (size of range * random number between 0 and 1) randomDateValue = min + randomNumber End Sub
protected override void OnGenerateNextValues() { SqlDateTime min; SqlDateTime max; //Generate a random date from either range 1 or range 2. //Randomly select either range 1 or range 2 by randomly //generating an odd or an even random number. //------------------------------------------------------------ if (randomRange.Next() % 2 == 0) //check for odd or even { min = range1MinValue; max = range1MaxValue; } else { min = range2MinValue; max = range2MaxValue; } //The formula for creating a random number in a specific range is: //start of range + (size of range * random number between 0 and 1) //size of range TimeSpan range = max.Value - min.Value; //(size of range * random number between 0 and 1) TimeSpan randomNumber = new TimeSpan((long)(range.Ticks * random.NextDouble())); //start of range + (size of range * random number between 0 and 1) randomDateValue = min + randomNumber; }
В меню Файл выберите команду Сохранить все.
Определение преобразователя типов
Чтобы задать входные свойства для этого генератора данных в окне свойств, необходимо предоставить преобразователь типа, который преобразует входные значения в тип и из типа SqlDateTime.
Создание класса преобразователя типов SqlDateTime
В меню Проект выберите команду Добавить класс.
Откроется диалоговое окно Добавление нового элемента.
В поле Имя введите SqlDateTimeConverter.
В верхней части окна Код перед объявлением класса добавьте следующие строки кода:
Imports System.ComponentModel Imports System.Data.SqlTypes Imports System.Globalization
using System.ComponentModel; using System.Data.SqlTypes; using System.Globalization;
Укажите, что класс наследует от класса TypeConverter:
Public Class SqlDateTimeConverter Inherits TypeConverter End Class
public class SqlDateTimeConverter: TypeConverter { }
Добавьте в объявление класса конструктор класса. При создании класса преобразователя типов в Visual Basic перейдите к шагу 6.
public SqlDateTimeConverter() { }
После конструктора класса добавьте метод, проверяющий, возможно ли выполнение определенного преобразования данным преобразователем типов:
Public Overrides Function CanConvertFrom(ByVal context As ITypeDescriptorContext, ByVal sourceType As Type) As Boolean Dim result As Boolean result = False If (sourceType Is GetType(System.String)) Then result = True Else result = MyBase.CanConvertFrom(context, sourceType) End If Return result End Function Public Overrides Function CanConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal destinationType As System.Type) As Boolean If (destinationType Is GetType(System.String)) Then Return True End If Return MyBase.CanConvertTo(context, destinationType) End Function
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { bool result = false; if (sourceType == typeof(string)) { result = true; } else { result = base.CanConvertFrom(context, sourceType); } return result; } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(string)) { return true; } return base.CanConvertTo(context, destinationType); }
В заключение добавьте методы преобразователя:
Public Overrides Function ConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object) As Object Dim dateTimeString As String dateTimeString = value.ToString If (dateTimeString.Length > 0) Then Dim dateTime As Date dateTime = Date.Parse(dateTimeString, culture) Return New SqlDateTime(dateTime) End If Return MyBase.ConvertFrom(context, culture, value) End Function Public Overrides Function ConvertTo(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object, ByVal destinationType As System.Type) As Object If (destinationType Is GetType(System.String)) Then Dim dateTime As Date dateTime = CType(value, SqlDateTime).Value Return dateTime.ToString(culture) End If Return MyBase.ConvertTo(context, culture, value, destinationType) End Function
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { string dateTimeString = value as string; if (dateTimeString != null) { DateTime dateTime = DateTime.Parse(dateTimeString, culture); return new SqlDateTime(dateTime); } return base.ConvertFrom(context, culture, value); } public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { DateTime dateTime = ((SqlDateTime)value).Value; return dateTime.ToString(culture); } return base.ConvertTo(context, culture, value, destinationType); }
В меню Файл выберите команду Сохранить все.
Подписание генератора
Все пользовательские генераторы данных перед регистрацией должны быть подписаны строгим именем.
Подписание генератора строгим именем
В меню Проект выберите команду Свойства GeneratorDateRanges, чтобы открыть свойства проекта.
На вкладке Подписи установите флажок Подписать сборку.
В области Выберите файл ключей строгого имени щелкните <Создать...>.
В области Имя файла ключей введите GeneratorDateRangesKey, введите и подтвердите пароль и нажмите кнопку ОК.
При построении решения этот файл ключей будет использоваться для подписания сборки.
В меню Файл выберите команду Сохранить все.
В меню Построение выберите Построить решение.
Генератор данных построен. Далее необходимо зарегистрировать его на компьютере, чтобы получить возможность использования этого генератора в планах создания данных.
Регистрация генератора
Следующий шаг после подписания и компиляции сборки – собрать сведения о сборке, созданные в проекте, в том числе номер версии, язык и региональные параметры, а также PublicKeyToken), которые помогут при регистрации сборки генератора.
Сбор сведений о сборке
В меню Вид выберите пункт Другие окна, а затем Окно команд, чтобы открыть командное окно.
В окне Команда введите следующий код. Вместо FilePath подставьте путь и имя откомпилированного DLL-файла. Заключите путь и имя файла в кавычки.
Примечание
По умолчанию используется следующий путь к скомпилированному DLL-файлу: SampleGenerator\bin\Debug.
? System.Reflection.Assembly.LoadFrom("FilePath").FullName
? System.Reflection.Assembly.LoadFrom(@"FilePath").FullName
Нажмите клавишу ВВОД. Строка должна иметь следующий вид (с учетом конкретного значения PublicKeyToken):
" GeneratorDateRanges, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn"
Добавьте примечания к сведениям о сборке или скопируйте их; они будут использоваться в следующей процедуре.
После этого будет создан XML-файл с использованием сведений о сборке, собранных в предыдущей процедуре.
Создание XML-файла
Выберите в обозревателе решений проект GeneratorDateRanges.
В меню Проект выберите команду Добавить новый элемент.
В области Шаблоны найдите и выберите элемент XML-файл.
В текстовом поле Имя введите GeneratorDateRanges.Extensions.xml и нажмите кнопку Добавить.
В обозревателе решений в проект будет добавлен файл GeneratorDateRanges.Extensions.xml.
Примечание
Чтобы правильно зарегистрировать сборку, необходимо использовать имя библиотеки DLL (в данном случае — "GeneratorDateRanges" с расширением ".Extensions.xml").
Откройте файл GeneratorDateRanges.Extensions.xml и обновите его в соответствии со следующим XML-файлом. Замените версию, язык и региональные параметры, а также значение PublicKeyToken сборки, которые были получены в предыдущей процедуре.
Примечание
Для типа расширения следует использовать полное имя класса.В данном случае: extension type="GeneratorDateRanges.GeneratorDateRanges".
<?xml version="1.0" encoding="utf-8"?> <extensions assembly="" version="1" xmlns="urn:Microsoft.Data.Schema.Extensions" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:Microsoft.Data.Schema.Extensions Microsoft.Data.Schema.Extensions.xsd"> <extension type="GeneratorDateRanges.GeneratorDateRanges" assembly=" GeneratorDateRanges, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn" enabled="true"/> </extensions>
В меню Файл выберите команду Сохранить все.
На следующем этапе необходимо скопировать сборку и XML-файл в каталог Extensions. Visual Studio Premium при запуске идентифицирует все расширения в каталоге %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions и вложенных каталогах, чтобы зарегистрировать их для использования в сеансе.
Копирование и регистрация сборки и XML-файла в каталоге Extensions
Создайте в каталоге %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\ папку с именем CustomGenerators.
Скопируйте файл сборки GeneratorDateRanges.dll из каталога Папка_проекта\GeneratorDateRanges\GeneratorDateRanges\bin\Debug\ в созданный каталог %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators.
Скопируйте файл сборки GeneratorDateRanges.Extensions.xml из каталога Папка_проекта\GeneratorDateRanges\GeneratorDateRanges\ в созданный каталог %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators.
Примечание
Рекомендуется помещать сборки расширений в папку каталога %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions.При таком подходе проще определить, какие из расширений входили в продукт изначально, а какие были созданы пользователем.Кроме того, рекомендуется сгруппировать расширения по категориям в отдельные папки.
Тестирование генератора диапазонов дат
Теперь, после создания генератора данных DateRanges, следует запустить новый экземпляр Visual Studio. При запуске Visual Studio выполняется регистрация сборки GeneratorDateRanges, добавленной в каталог %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators.
Затем нужно создать проект базы данных, в котором можно проверить правильность работы генератора данных DateRanges.
Создание проекта базы данных
Запустите новый экземпляр Visual Studio, который распознает сборку GeneratorDateRanges.dll и выполнит ее регистрацию.
В меню Файл последовательно выберите команды Создать и Проект.
Отобразится диалоговое окно Новый проект.
В списке Установленные шаблоны разверните узел База данных и выберите SQL Server.
В области Шаблоны щелкните Мастер SQL Server 2008.
В поле Имя введите SampleGeneratorDB.
Примечание
Если при этом уже были выполнены все шаги, описанные в разделе Пошаговое руководство. Создание пользовательского генератора данных, то проект SampleGeneratorDB уже создан и можно перейти к следующей процедуре: Добавление таблицы в проект базы данных.
Установите флажок Создать каталог для решения.
Примите значения по умолчанию для параметров Местоположение, Имя решения и Добавить в систему управления версиями, а затем нажмите кнопку ОК.
Нажмите кнопку Готово. По завершении работы мастера нажмите кнопку Готово еще раз.
В обозревателе решений отобразится новый проект базы данных, SampleGeneratorDB.
В меню Вид выберите команду Представление схемы базы данных.
Появится представление схемы, если оно еще не отображалось.
Далее нужно будет добавить в проект простую таблицу с единственным столбцом SQL-типа DateRange.
Добавление таблицы в проект базы данных
В представлении схемы последовательно разверните узлы SampleGeneratorDB, Схема и dbo, а затем щелкните узел Таблицы.
В меню Проект выберите команду Добавить новый элемент.
Примечание
Можно также щелкнуть правой кнопкой мыши проект SampleGeneratorDB в представлении схемы, выбрать команду Добавить и щелкнуть Таблица.
В Шаблоны щелкните Таблица.
Примечание
Для быстрого и простого поиска шаблона таблицы, в списке Категории выберите Таблицы и представления.
В поле Имя введите в качестве имени новой таблицы TableDates.
Нажмите кнопку Добавить, чтобы добавить таблицу в проект базы данных.
В обозревателе решений отображается новый файл для таблицы проекта базы данных. В представлении схемы отображается новый объект таблицы. Откроется редактор Transact-SQL, в котором отобразится определение новой таблицы.
В редакторе Transact-SQL измените определение таблицы следующим образом:
CREATE TABLE [dbo].[TableDates] ( dates DateTime )
В меню Файл выберите команду Save TableDates.table.sql.
Теперь, когда таблица создана, нужно добавить проверочное ограничение для проверки допустимости используемых диапазонов дат.
Примечание
Соответствующие диапазоны дат для значений свойств пользовательского генератора данных DateRanges будут введены в другой процедуре.Дополнительные сведения см. в разделе Создание и настройка плана создания данных.
Добавление проверочного ограничения для таблицы
В представлении схемы разверните узел Таблицы и выберите таблицу TableDates.
В меню Проект выберите команду Добавить новый элемент.
В Шаблоны щелкните Проверочное ограничение.
Примечание
Можно также щелкнуть правой кнопкой мыши таблицу Dates в представлении схемы, выбрать команду Добавить и щелкнуть Проверочное ограничение.
В поле Имя введите CheckConstraintDateRanges в качестве имени нового проверочного ограничения.
Нажмите кнопку Добавить, чтобы добавить проверочное ограничение в проект базы данных.
В обозревателе решений отобразится новый файл для проверочного ограничения в проекте базы данных. В представлении схемы отобразится объект проверочного ограничения. Откроется редактор Transact-SQL, в котором отобразится определение нового проверочного ограничения.
В редакторе Transact-SQL измените проверочное ограничения следующим образом:
ALTER TABLE [dbo].[TableDates] ADD CONSTRAINT [CheckConstraintDateRanges] CHECK ((dates BETWEEN '1/1/1800' AND '1/1/1900')OR(dates BETWEEN '1/1/1979' AND '12/31/2008'))
В меню Файл выберите команду Сохранить Dates.CheckConstraintDateRanges.chkconst.sql.
Примечание
Если при этом уже были выполнены все шаги, описанные в разделе Пошаговое руководство. Создание пользовательского генератора данных, можно переходить к разделу Создание и настройка плана создания данных.
Теперь, когда есть таблица и проверочное ограничение, можно настроить базу данных для развертывания.
Настройка параметров проекта развертывания
В обозревателе решений выберите SampleGeneratorDB (проект, а не решение).
В меню Проект выберите команду SampleGeneratorDB: свойства.
Откроется окно свойств проекта.
Примечание
Можно также щелкнуть правой кнопкой мыши SampleGeneratorDB в обозревателе решений и выбрать команду Свойства.
Перейдите на вкладку Развертывание.
В списке Действие развертывания щелкните Создать скрипт развертывания (SQL) и развернуть в базу данных.
Нажмите кнопку Изменить, чтобы задать целевое подключение.
Задайте данные для подключения к серверу базы данных, на котором требуется развернуть базу данных SampleGeneratorDB.
В поле Выберите или введите имя базы данных введите SampleGeneratorDB.
Нажмите кнопку ОК.
В Конечное подключение отображается строка подключения. Обратите внимание, что в поле Имя конечной базы данных указано SampleGeneratorDB.
Примите значения по умолчанию для остальных параметров.
В меню Файл выберите команду Сохранить выбранные элементы.
Параметры построения проекта сохранены.
Теперь нужно построить проект базы данных.
Построение проекта базы данных
В меню Построение выберите Построить решение.
Будет выполнено построение проекта базы данных. Если оно завершится успешно, в строке состояния отобразится сообщение "Построение успешно завершено", а результаты построения будут выведены в окне Выходные данные.
Теперь нужно развернуть проект базы данных.
Развертывание проекта базы данных на сервере базы данных
В обозревателе решений выберите SampleGeneratorDB (проект, а не решение).
В меню Построение выберите команду Развернуть SampleGeneratorDB.
Проект базы данных разворачивается с использованием подключения, заданного в конфигурации построения. Если развертывание выполнено успешно, в окне Выходные данные и строке состояния отобразится сообщение "Построение успешно завершено".
Создание и настройка плана создания данных
Далее нужно создать план создания данных. План создания данных содержит сведения о том, какие таблицы и столбцы требуется заполнить данными. Дополнительные сведения см. в разделе Практическое руководство. Создание плана создания данных.
Создание и настройка плана создания данных
В обозревателе решений выделите узел Планы создания данных.
В меню Проект выберите команду Добавить новый элемент.
В области Категории выберите План создания данных.
В области Шаблоны щелкните План создания данных.
В текстовом поле Имя введите SampleGenerator.dgen.
Нажмите кнопку Добавить.
Будет создан создания данных. Отобразится план создания данных и окно Предварительный просмотр созданных данных. Окно плана создания данных будет поделено на две области по горизонтали. В верхней области указываются таблицы, определенные в схеме проекта базы данных (в данном случае это таблица dbo.TableDates). В нижней области отображается столбец сведений для таблицы, выделенной в верхней области (в данном случае это столбец адресов)
Примечание
Если окно Предварительный просмотр созданных данных не открыто, его можно открыть, выбрав в меню Данные команду Генератор данных, а затем выбрав Просмотр создания данных.По умолчанию окно Предварительный просмотр созданных данных закреплено и добавлено в виде вкладки в нижней области окна плана создания данных.Чтобы развернуть представление, щелкните окно, а затем выберите команду Вкладка в меню Окно.Можно также щелкнуть правой кнопкой мыши в заголовке окна и выбрать пункт Закрепить как вкладку.
В конструкторе SampleGenerator.dgen убедитесь, что выбрана как таблица dbo.TableDates, так и столбец dates.
Измените значение в поле таблицы Строки для вставки на 500.
В конструкторе SampleGenerator.dgen выберите столбец dates и щелкните в раскрывающемся списке Генератор пункт GeneratorDateRanges.
После выбора этого столбца дат введите в окне свойств величины для двух входных значений диапазонов дат:
Range1Max 31.12.2008 12:00:00
Range1Min 01.01.1979 12:00:00
Range2Max 01.01.1900 12:00:00
Range2Max 01.01.1800 12:00
Теперь пользовательский генератор адресов настроен правильно.
В меню Файл выберите команду Сохранить все.
Выполнение плана создания данных для создания данных диапазонов дат
Наконец, нужно выполнить план создания данных и посмотреть на пользовательский генератор данных для диапазонов дат в действии.
Выполнение плана создания данных
В обозревателе решений выберите элемент SampleGenerator.dgen.
Примечание
План создания данных должен быть открыт.Если он не открыт, вначале откройте его.
В меню Данные выберите команду Генератор данных и щелкните Генерировать данные.
Откроется диалоговое окно Подключение к базе данных.
В списке Сведения о подключении средств создания данных выберите базу данных SampleGeneratorDB и нажмите кнопку ОК.
Нажмите кнопку Yes, когда вам будет предложено очистить содержимое таблиц перед вставкой новых строк.
Будут созданы данные. В окне "Заполнение" столбец состояния обновляется состоянием создания данных. В строке состояния отобразится сводка создания данных для всех таблиц.
(Необязательно.) С помощью другого средства войдите в базу данных. Для этого шага можно воспользоваться редактором Transact-SQL, предусмотренным в Visual Studio Premium. Дополнительные сведения см. в документе Editing Database Scripts and Objects with the Transact-SQL Editor на веб-сайте Майкрософт. Просмотрите новые данные с помощью следующего запроса:
use SampleGeneratorDB select * from dbo.TableDates
На вкладке Результаты должно отображать 500 дат.
(Необязательно.) В окне свойств измените значение Range1Max на 31.12. 3000 12:00:00 и запустите генератор данных снова, повторив шаги со 2 по 5.
В окне Список ошибок отобразится сообщение об ошибке, являющееся результатом нарушения проверочного ограничения, возникшего из-за изменения диапазона дат таким образом, что он стал выходить за пределы разрешенного диапазона.
См. также
Задачи
Пошаговое руководство. Создание пользовательского генератора данных
Практическое руководство. Регистрация и управление расширениями функций
Ссылки
Microsoft.Data.Schema.Tools.DataGenerator
Основные понятия
Создание специализированных тестовых данных с помощью пользовательского генератора данных
Общие сведения о расширении генераторов данных
Задание сведений о создании данных для столбца
Другие ресурсы
Устранение неполадок, связанных с расширением функций
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Декабрь 2010 |
С учетом отзывов пользователей исправлены ошибки в коде. |
Обратная связь от клиента. |