Procédure pas à pas : création d'un générateur de données personnalisé pour une contrainte de validation
Vous pouvez utiliser des générateurs de données standard pour remplir des colonnes avec des données dans Visual Studio Premium ou Visual Studio Ultimate. Si la colonne que vous souhaitez remplir dépend d'une contrainte de validation, les données avec lesquelles vous remplissez la colonne doivent satisfaire cette contrainte de validation. Les générateurs de données standard peuvent générer des données qui répondent à de nombreuses contraintes de validation. Par exemple, si une contrainte de validation nécessite qu'une date figure dans une certaine plage, vous pouvez utiliser le générateur DateTime standard et définir les propriétés Min et Max pour satisfaire à cette contrainte.
Toutefois, les générateurs de données standard ne peuvent pas répondre à toutes les contraintes de validation. Par exemple, si une contrainte de validation nécessite qu'une date figure dans l'une de deux plages distinctes, vous ne pouvez pas utiliser le générateur DateTime standard. Dans cette procédure pas à pas, vous créerez un générateur de données personnalisé qui peut satisfaire une telle contrainte. Le générateur accepte deux plages comme entrée, puis génère une date aléatoire qui figure dans l'une de ces deux plages.
Dans cette procédure pas à pas, vous exécuterez les tâches suivantes :
Créez une classe qui hérite de Generator.
Créer des propriétés d'entrée afin que l'utilisateur puisse indiquer les deux plages de dates.
Créer une propriété de sortie à utiliser comme sortie de générateur.
Substituer la méthode OnInitialize pour donner une valeur de départ aux objets Random et rendre votre générateur déterministe.
Substituer la méthode OnGenerateNextValues pour générer les données.
Signer le générateur avec un nom fort.
Composants requis
Pour effectuer cette procédure, il est indispensable d'installer Visual Studio Premium ou Visual Studio Ultimate.
Création de la classe du générateur de données personnalisé
Commencez à créer le générateur de données personnalisé en créant une bibliothèque de classes.
Pour créer la classe du générateur de données personnalisé
Dans Visual Studio, créez un projet de bibliothèque de classes dans le langage de votre choix, puis nommez-le GeneratorDateRanges.
Dans le menu Projet, cliquez sur Ajouter une référence.
Sélectionnez l'onglet .NET.
Dans la colonne Nom du composant, repérez les composants suivants :
[Microsoft.Data.Schema]
[Microsoft.Data.Schema.Sql]
[Microsoft.Data.Schema.Tools]
Conseil
Appuyez sur CTRL tout en cliquant pour sélectionner plusieurs composants.
Cliquez sur OK lorsque vous avez sélectionné tous les composants requis.
Les références sélectionnées s'afficheront sous le nœud Références du projet dans l'Explorateur de solutions.
(Facultatif, Visual Basic uniquement) Dans l'Explorateur de solutions, cliquez sur Afficher tous les fichiers, puis développez le nœud Références pour vérifier la nouvelle référence.
Ouvrez le fichier Class1, puis, en haut de la fenêtre Code, avant la déclaration de classe, ajoutez les lignes de code suivantes :
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;
Renommez la classe Class1 en GeneratorDateRanges, puis indiquez qu'elle hérite de Generator.
Avertissement
Par défaut, le nom que vous donnez à votre classe est le nom qui apparaît dans la liste affichée dans la colonne Générateur de la fenêtre Détails de la colonne. Vous devez spécifier un nom qui ne crée pas de conflit avec le nom d'un générateur standard ou d'un autre générateur personnalisé.
Public Class GeneratorDateRanges Inherits Generator End Class
public class GeneratorDateRanges: Generator { }
Ajoutez le DatabaseSchemaProviderCompatibilityAttribute, comme indiqué dans l'exemple suivant :
<DatabaseSchemaProviderCompatibility(GetType(SqlDatabaseSchemaProvider))> _ Public Class GeneratorDateRanges Inherits Generator End Class
[DatabaseSchemaProviderCompatibility(typeof(SqlDatabaseSchemaProvider))] public class GeneratorDateRanges : Generator { }
Pour plus d'informations sur l'attribut de compatibilité d'extension, consultez Extension des fonctionnalités de base de données de Visual Studio.
Dans le menu Fichier, cliquez sur Enregistrer tout.
Ajout des propriétés d'entrée
Ce générateur de données personnalisé accepte deux plages de dates comme entrée. Pour spécifier chaque plage, l'utilisateur indique les dates minimales et maximales pour chacune d'elles. Par conséquent, vous devez créer quatre propriétés d'entrée au total : deux dates minimales et deux dates maximales.
Pour ajouter les propriétés d'entrée
Créez quatre variables membres pour contenir les dates minimales et maximales des deux plages de dates :
Dim range1MinValue As SqlDateTime Dim range1MaxValue As SqlDateTime Dim range2MinValue As SqlDateTime Dim range2MaxValue As SqlDateTime
SqlDateTime range1MinValue; SqlDateTime range1MaxValue; SqlDateTime range2MinValue; SqlDateTime range2MaxValue;
Créez quatre propriétés pour définir les dates minimales et maximales des deux plages de dates. Les propriétés doivent comporter l'InputAttribute pour les identifier comme propriétés d'entrée.
Notes
Pour spécifier les propriétés d'entrée pour ce générateur de données dans la fenêtre Propriétés, vous devez fournir un convertisseur de type qui convertit les valeurs d'entrée vers et à partir du type SqlDateTime. Pour ce faire, vous ajouterez une classe de prise en charge SqlDateTimeConverter à une étape ultérieure de cette procédure.
<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;} }
Dans le menu Fichier, cliquez sur Enregistrer tout.
Ajout de la propriété de sortie
Ce générateur de données personnalisé retourne une date aléatoire en tant que sortie. Par conséquent, vous devez créer une propriété de sortie.
Pour ajouter la propriété de sortie
Créez une variable membre pour contenir la date aléatoire qui représente la sortie :
Dim randomDateValue As SqlDateTime
SqlDateTime randomDateValue;
Créez une propriété pour retourner la date aléatoire en tant que sortie. La propriété doit comporter l'OutputAttribute pour l'identifier comme propriété de sortie.
<Output()> _ Public ReadOnly Property RandomDate() As SqlDateTime Get Return randomDateValue End Get End Property
[Output] public SqlDateTime RandomDate { get {return randomDateValue;} }
Dans le menu Fichier, cliquez sur Enregistrer tout.
Substitution de la méthode OnInitialize
Lorsque vous générez des données aléatoires, elles peuvent être déterministes ou non déterministes. Les données déterministes répètent les mêmes données chaque fois que vous les générez avec la même valeur de départ. Tous les générateurs de données ont une propriété Seed que l'utilisateur peut définir. Vous pouvez substituer la méthode OnInitialize pour donner une valeur de départ aux objets Random et rendre votre générateur déterministe.
Pour substituer la méthode OnInitialize
Créez deux variables membres pour générer des nombres aléatoires, comme indiqué dans l'exemple suivant. Une variable génère une date aléatoire. L'autre variable effectue un choix aléatoire entre les deux plages de dates possibles.
Dim random As Random Dim randomRange As Random
Random random; Random randomRange;
Substituez la méthode 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); }
Dans le menu Fichier, cliquez sur Enregistrer tout.
Substitution de la méthode OnGenerateNextValues
Visual Studio Premium appelle la méthode OnGenerateNextValues du générateur pour créer les données nécessaires. Vous devez substituer cette méthode pour fournir la logique qui génère la date aléatoire pour la propriété de sortie.
Pour substituer la méthode OnGenerateNextValues
Substituez la méthode OnGenerateNextValues, comme illustré dans l'exemple suivant :
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; }
Dans le menu Fichier, cliquez sur Enregistrer tout.
Définition du convertisseur de type
Pour spécifier les propriétés d'entrée pour ce générateur de données dans la fenêtre Propriétés, vous devez fournir un convertisseur de type qui convertit les valeurs d'entrée vers et à partir du type SqlDateTime.
Pour créer la classe de convertisseur de type SqlDateTime
Dans le menu Projet, cliquez sur Ajouter une classe.
La boîte de dialogue Ajouter un nouvel élément s'affiche alors.
Dans la zone Nom, tapez SqlDateTimeConverter.
En haut de la fenêtre Code, avant la déclaration de classe, ajoutez les lignes de code suivantes :
Imports System.ComponentModel Imports System.Data.SqlTypes Imports System.Globalization
using System.ComponentModel; using System.Data.SqlTypes; using System.Globalization;
Spécifiez que votre classe hérite de TypeConverter :
Public Class SqlDateTimeConverter Inherits TypeConverter End Class
public class SqlDateTimeConverter: TypeConverter { }
Dans la déclaration de classe, ajoutez le constructeur de classe. Si vous écrivez la classe de convertisseur de type dans Visual Basic, passez à l'étape 6.
public SqlDateTimeConverter() { }
Suivant le constructeur de classe, ajoutez une méthode qui vérifie si une conversion particulière est possible à l'aide de ce convertisseur de type :
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); }
Enfin, ajoutez les méthodes du convertisseur :
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); }
Dans le menu Fichier, cliquez sur Enregistrer tout.
Signature du générateur
Tous les générateurs de données personnalisés doivent être signés avec un nom fort avant d'être inscrits.
Pour signer le générateur avec un nom fort
Dans le menu Projet, cliquez sur Propriétés de GeneratorDateRanges pour ouvrir les propriétés du projet.
Sous l'onglet Signature, activez la case à cocher Signer l'assembly.
Dans la zone Choisir un fichier de clé de nom fort, cliquez sur <Nouveau...>.
Dans la zone Nom du fichier de clé, tapez GeneratorDateRangesKey, tapez et confirmez un mot de passe, puis cliquez sur OK.
Lorsque vous générez votre solution, le fichier de clé est utilisé pour signer l'assembly.
Dans le menu Fichier, cliquez sur Enregistrer tout.
Dans le menu Générer, cliquez sur Générer la solution.
Votre générateur de données a maintenant été généré. Vous devez ensuite l'inscrire sur votre ordinateur afin de pouvoir l'utiliser dans des plans de génération de données.
Enregistrement du générateur
Une fois votre assembly signé et compilé, vous allez, à présent, collecter les informations de l'assembly générées dans le projet, notamment la version, la culture et le PublicKeyToken pour faciliter l'enregistrement de l'assembly du générateur.
Pour collecter des informations de l'assembly
Dans le menu Affichage, cliquez sur Autres fenêtres, puis cliquez sur Fenêtre Commande pour ouvrir la fenêtre Commande.
Dans la fenêtre Commande, tapez le code suivant. Pour FilePath, substituez le chemin d'accès et le nom de votre fichier .dll compilé. Placez le chemin d'accès et le nom de fichier entre guillemets.
Notes
Par défaut, le chemin d'accès de votre fichier .dll compilé est SampleGenerator\bin\Debug.
? System.Reflection.Assembly.LoadFrom("FilePath").FullName
? System.Reflection.Assembly.LoadFrom(@"FilePath").FullName
Appuyez sur Entrée. La ligne doit ressembler à ce qui suit avec votre PublicKeyToken spécifique :
" GeneratorDateRanges, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nnnnnnnnnnnnnnnn"
Notez ou copiez les informations de cet assembly, car elles seront utilisées dans la procédure suivante.
Ensuite, vous créez un fichier XML en utilisant les informations d'assembly collectées lors de la procédure précédente.
Pour créer le fichier XML
Dans l'Explorateur de solutions, sélectionnez le projet GeneratorDateRanges.
Dans le menu Projet, cliquez sur Ajouter un nouvel élément.
Dans le volet Modèles, recherchez et sélectionnez l'élément Fichier XML.
Dans la zone de texte Nom, tapez GeneratorDateRanges.Extensions.xml, puis cliquez sur le bouton Ajouter.
Le fichier GeneratorDateRanges.Extensions.xml est ajouté au projet dans l'Explorateur de solutions.
Notes
Vous devez utiliser le nom de votre DLL (dans ce cas, « GeneratorDateRanges » suivi de « .Extensions.xml ») pour que l'enregistrement de l'assembly se fasse correctement.
Ouvrez le fichier GeneratorDateRanges.Extensions.xml et mettez-le à jour pour qu'il corresponde au fichier XML suivant. Remplacez les données de l'assembly (version, culture et PublicKeyToken) que vous avez extraites au cours de la procédure précédente.
Notes
Le type d'extension doit utiliser le nom qualifié complet de la classe. Dans ce cas : type d'extension = « 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>
Dans le menu Fichier, cliquez sur Enregistrer tout.
L'étape suivante vous invite à copier l'assembly et le fichier XML dans le répertoire Extensions. Au démarrage de Visual Studio Premium, celui-ci se charge d'identifier les extensions à l'intérieur du répertoire et des sous-répertoires %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions et de les enregistrer en vue de les utiliser au cours de la session.
Pour copier et enregistrer l'assembly et le fichier XML dans le répertoire Extensions
Créez un dossier appelé CustomGenerators dans le répertoire %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\.
Copiez le fichier assembly GeneratorDateRanges.dll du répertoire ProjectFolder\GeneratorDateRanges\GeneratorDateRanges\bin\Debug\ vers le répertoire %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators que vous avez créé.
Copiez le fichier assembly GeneratorDateRanges.Extensions.xml du répertoire ProjectFolder\GeneratorDateRanges\GeneratorDateRanges\bin\Debug\ vers le répertoire %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators que vous avez créé.
Notes
Il est recommandé de placer vos assemblys d'extension dans un même dossier au sein du répertoire %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions. Cette stratégie vous aidera à identifier les extensions incluses dans le produit et celles qui correspondent à vos créations personnalisées. Vous devez envisager d'organiser également vos extensions en dossiers spécifiques à la catégorie.
Test du générateur de plages de dates
Maintenant que vous avez créé le générateur de données DateRanges, vous devez démarrer une nouvelle instance de Visual Studio. Lorsque Visual Studio démarrera, il enregistrera l'assembly GeneratorDateRanges auquel vous avez ajouté %Program Files%\Microsoft Visual Studio 10.0\VSTSDB\Extensions\CustomGenerators.
Ensuite, vous créerez un projet de base de données dans lequel vous pouvez vérifier que le générateur de données DateRanges fonctionne correctement.
Pour créer le projet de base de données
Démarrez une nouvelle instance de Visual Studio, qui reconnaîtra l'assembly GeneratorDateRanges.dll et l'enregistrera.
Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.
La boîte de dialogue Nouveau projet s'affiche.
Dans la liste Modèles installés, développez Base de données, puis cliquez sur SQL Server.
Dans Modèles, cliquez sur Assistant SQL Server 2008.
Dans Nom, tapez SampleGeneratorDB.
Notes
Si vous avez déjà effectué toutes les étapes dans Procédure pas à pas : création d'un générateur de données personnalisé, vous avez déjà créé le projet SampleGeneratorDB, et vous pouvez passer à la procédure suivante, Pour ajouter une table au projet de base de données.
Activez la case à cocher Créer le répertoire pour la solution.
Acceptez les valeurs par défaut pour l'Emplacement, Nom de solution, puis Ajouter au contrôle de code source, et enfin cliquez sur OK.
Cliquez sur Terminer. Lorsque l'Assistant est fini, cliquez encore sur Terminer.
Le nouveau projet de base de données, SampleGeneratorDB, s'affiche dans l'Explorateur de solutions.
Dans le menu Affichage, cliquez sur Vue Schéma de base de données.
La vue Schéma s'affiche si elle n'était pas déjà visible.
Ensuite, vous ajouterez une table simple au projet, avec une colonne unique et un type SQL DateRange.
Pour ajouter une table au projet de base de données
Dans la Vue Schéma, développez le nœud SampleGeneratorDB, puis le nœud Schémas, développez le nœud dbo, puis cliquez sur Tables.
Dans le menu Projet, cliquez sur Ajouter un nouvel élément.
Notes
Vous pouvez également cliquer avec le bouton droit sur le projet SampleGeneratorDB dans la Vue Schéma, pointer sur Ajouter, puis cliquer sur Table.
Dans Modèles, cliquez sur Table.
Notes
Dans la liste Catégories, vous pouvez cliquer sur Tables et vues pour rechercher plus facilement un modèle de table.
Dans la zone Nom, tapez TableDates en tant que nom à attribuer à la nouvelle table.
Cliquez sur Ajouter pour ajouter la table au projet de base de données.
L'Explorateur de solutions affiche le nouveau fichier pour la table dans votre projet de base de données. La vue Schéma affiche le nouvel objet table. L'éditeur Transact-SQL apparaît et affiche la définition de votre nouvelle table.
Dans l'éditeur Transact-SQL, modifiez la définition de la table afin qu'elle corresponde à l'exemple suivant :
CREATE TABLE [dbo].[TableDates] ( dates DateTime )
Dans le menu Fichier, cliquez sur Enregistrer TableDates.table.sql.
Avec la table en place, vous ajouterez maintenant une contrainte de validation pour vérifier que les plages de dates utilisées sont valides.
Notes
Vous entrerez des plages de dates correspondant pour les valeurs de propriétés du générateur de données DateRanges personnalisé dans une autre procédure. Pour plus d'informations, consultez Création et configuration du plan de génération de données.
Pour ajouter une contrainte de validation à la table
Dans la Vue Schéma, développez le nœud Tables, puis cliquez sur la table TableDates.
Dans le menu Projet, cliquez sur Ajouter un nouvel élément.
Dans Modèles, cliquez sur Contrainte de validation.
Notes
Vous pouvez également cliquer avec le bouton droit sur la table Dates dans la Vue Schéma, pointer sur Ajouter, puis cliquer sur Contrainte de validation.
Dans Nom, tapez CheckConstraintDateRanges pour attribuer ce nom à la nouvelle contrainte de validation.
Cliquez sur Ajouter pour ajouter la contrainte de validation à votre projet de base de données.
L'Explorateur de solutions affiche le nouveau fichier pour la contrainte de validation dans votre projet de base de données. La Vue Schéma affiche le nouvel objet de contrainte de validation. L'éditeur Transact-SQL apparaît et affiche la définition de votre nouvelle contrainte de validation.
Dans l'éditeur Transact-SQL, modifiez la contrainte de validation afin qu'elle corresponde à l'exemple suivant :
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'))
Dans le menu Fichier, cliquez sur Enregistrer Dates.CheckConstraintDateRanges.chkconst.sql.
Notes
Si vous avez déjà effectué toutes les étapes dans Procédure pas à pas : création d'un générateur de données personnalisé, vous pouvez passer à la section Création et configuration du plan de génération de données.
Avec la table et la contrainte de validation en place, vous pouvez maintenant configurer la base de données pour le déploiement.
Pour configurer les paramètres de déploiement du projet
Dans l'Explorateur de solutions, cliquez sur SampleGeneratorDB (le projet, pas la solution).
Dans le menu Projet, cliquez sur Propriétés SampleGeneratorDB.
La fenêtre Propriétés du projet s'affiche.
Notes
Vous pouvez également cliquer avec le bouton droit sur SampleGeneratorDB dans l'Explorateur de solutions, puis cliquer sur Propriétés.
Cliquez sur l'onglet Déployer.
Dans la liste Déployer une action, cliquez sur Créer un script de déploiement (.sql) et le déployer vers la base de données.
Cliquez sur le bouton Modifier pour spécifier la connexion cible.
Spécifiez les informations de connexion au serveur de base de données vers lequel vous souhaitez déployer la base de données SampleGeneratorDB.
Dans Sélectionner ou entrer un nom de base de données, tapez SampleGeneratorDB.
Cliquez sur OK.
Connexion cible est rempli avec la chaîne de connexion. Notez que le Nom de la base de données cible a la valeur SampleGeneratorDB.
Acceptez les valeurs par défaut pour les autres options.
Dans le menu Fichier, cliquez sur Enregistrer les éléments sélectionnés.
Les paramètres de génération du projet sont enregistrés.
Ensuite, vous générerez votre projet de base de données.
Pour générer le projet de base de données
Dans le menu Générer, cliquez sur Générer la solution.
Votre projet de base de données est généré. En cas de réussite, le message « La génération a réussi » est visible dans la barre d'état, et les résultats de la génération sont affichés dans la fenêtre Sortie.
Ensuite, vous déploierez votre projet de base de données.
Pour déployer le projet de base de données vers le serveur de base de données.
Dans l'Explorateur de solutions, cliquez sur SampleGeneratorDB (le projet, pas la solution).
Dans le menu Générer, cliquez sur Déployer SampleGeneratorDB.
Votre projet de base de données est déployé en utilisant la connexion que vous avez spécifiée dans la configuration de build. En cas de réussite, le message « Déploiement terminé » apparaît dans la barre d'état et dans la fenêtre Sortie.
Création et configuration du plan de génération de données
Ensuite, vous créerez le plan de génération de données. Le plan de génération de données contient les informations sur les tables et les colonnes que vous souhaitez remplir de données. Pour plus d'informations, consultez Comment : créer des plans de génération de données.
Pour créer et configurer le plan de génération de données
Dans l'Explorateur de solutions, sélectionnez le nœud Plans de génération de données.
Dans le menu Projet, cliquez sur Ajouter un nouvel élément.
Dans le volet Catégories, cliquez sur Plan de génération de données.
Dans le volet Modèles, cliquez sur Plan de génération de données.
Dans la zone de texte Nom, tapez SampleGenerator.dgen.
Cliquez sur Ajouter.
Le plan de génération de données est créé. Le plan de génération de données et la fenêtre Aperçu de la génération de données s'affichent. La fenêtre du plan de génération de données est divisée horizontalement en deux volets. Le volet supérieur répertorie les tables définies dans le schéma de projet de base de données, dans ce cas, la table dbo.TableDates. Le volet inférieur affiche les détails de la colonne pour la table mise en surbrillance dans le volet supérieur, dans ce cas, la colonne d'adresse.
Notes
Si la fenêtre Aperçu de la génération de données n'est pas ouverte, vous pouvez l'ouvrir en ouvrant le menu Données, en pointant sur Générateur de données, puis en cliquant sur le nom de la fenêtre Afficher un aperçu de la génération de données. Par défaut, la fenêtre Aperçu de la génération de données est ancrée et affiche des onglets au bas de la fenêtre du plan de génération de données. Pour développer la vue, cliquez sur la fenêtre, puis sur Document avec onglet dans le menu Fenêtre. Vous pouvez également cliquer avec le bouton droit dans la barre de titre, puis cliquer sur Ancrer en tant que document avec onglet.
Dans le concepteur SampleGenerator.dgen, vérifiez que la table dbo.TableDates et la colonne de dates sont activées.
Dans la table, affectez 500 à la valeur sous Lignes à insérer.
Dans le concepteur SampleGenerator.dgen, sélectionnez la colonne dates, puis cliquez sur le Générateur déroulant pour sélectionner le GeneratorDateRanges.
Avec la colonne de dates sélectionnée, dans la fenêtre Propriétés, tapez les valeurs pour les deux entrées de plage de dates :
Range1Max 12/31/2008 12:00:00 AM
Range1Min 1/1/1979 12:00:00 AM
Range2Max 1/1/1900 12:00:00 AM
Range2Min 1/1/1800 12:00 AM
Votre générateur d'adresses personnalisé est maintenant configuré correctement.
Dans le menu Fichier, cliquez sur Enregistrer tout.
Exécution du plan de génération de données pour générer des données de plages de dates
Enfin, vous exécuterez le plan de génération de données et consulterez votre générateur de données de plages de dates personnalisé en action.
Pour exécuter le plan pour générer les données
Dans l'Explorateur de solutions, cliquez sur SampleGenerator.dgen.
Notes
Le plan de génération de données doit être ouvert. Si le plan n'est pas ouvert, ouvrez-le d'abord.
Dans le menu Données, pointez sur Générateur de données, puis cliquez sur Générer les données.
La boîte de dialogue Se connecter à la base de données s'affiche.
Dans la liste Informations de connexion de génération de données, cliquez sur la base de données SampleGeneratorDB, puis sur OK.
Cliquez sur Oui lorsque vous êtes invité à effacer le contenu des tables avant d'insérer de nouvelles lignes.
Les données sont générées. Dans la fenêtre Remplissage, la colonne d'état est mise à jour selon l'état de la génération de données. La barre d'état résume la génération de données pour toutes les tables.
(Facultatif) Utilisez un outil différent pour vous connecter à la base de données. Vous pouvez utiliser l'éditeur Transact-SQL fourni dans Visual Studio Premium pour cette étape. Pour plus d'informations, consultez Editing Database Scripts and Objects with the Transact-SQL Editor sur le site Web de Microsoft. Affichez les nouvelles données en exécutant la requête suivante :
use SampleGeneratorDB select * from dbo.TableDates
L'onglet Résultats doit afficher les 500 dates résultantes.
(Facultatif) Dans la fenêtre Propriétés, affectez la valeur 12/31/3000 12:00:00 AM à Range1Max et exécutez encore le générateur de données en répétant les étapes 2 à 5.
Dans la fenêtre Liste d'erreurs, vous consulterez une erreur générée par la violation de la contrainte de validation, provoquée par la plage de dates qui est modifiée avec des valeurs situées en dehors de la plage autorisée.
Voir aussi
Tâches
Procédure pas à pas : création d'un générateur de données personnalisé
Comment : inscrire et gérer des extensions de fonctionnalité
Référence
Microsoft.Data.Schema.Tools.DataGenerator
Concepts
Générer des données de test spécialisées à l'aide d'un générateur de données personnalisé
Vue d'ensemble de l'extensibilité des générateurs de données
Spécifier les détails de génération de données pour une colonne
Autres ressources
Résolution des problèmes liés aux extensions de fonctionnalités
Historique des modifications
Date |
Historique |
Motif |
---|---|---|
Décembre 2010 |
Résolution d'une erreur de code, en réponse à des commentaires client. |
Commentaires client. |