Comment écrire à une Variable dans un script de composant
Je veux écrire une valeur à une variable dans le package à l'aide du composant de script à l'aide de C#.
actuellement, je suis à l'aide de ces codes:
public class ScriptMain : UserComponent
{
string s, r, m;
public override void PreExecute()
{
base.PreExecute();
}
public override void PostExecute()
{
base.PostExecute();
Variables.SNumber = s;
Variables.RNumber = r;
Variables.MNumber = m;
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (Row.Col1.Equals("MyName"))
{
s = Row.Column4.Substring(122, 5).Trim();
r = Row.Column8.Substring(5, 14).Trim();
m = Row.Column8.Substring(66, 4).Trim() + "." + Row.Column8.Substring(70,
2).Trim();
}
}
}
SNumber,Mnumber et RNumber sont mes variables globales dans les forfaits.Après le composant de script iam à l'aide de la colonne dérivée pour affecter les valeurs.
Mais les variables n'a pas de valeur.Svp aidez-moi.
Grâce
Vous devez vous connecter pour publier un commentaire.
Il semble que ce soit un script compoent dans une tâche de flux de données. Vous ne pouvez pas utiliser des variables dans ce sens, malheureusement. Vous devrez vous créer des colonnes que de garder ces valeurs pour une même ligne par ligne, ou vous aurez à faire preuve de créativité.
Une façon est ici pour le tuyau de votre flux de données à un jeu d'enregistrements de destination, créez une variable de type Objet, et des variables pour stocker chaque colonne, vous devez dans ce flux de données. Vous pouvez ensuite utiliser une Boucle Foreach sur le jeu d'enregistrements destination qui est maintenant stockée dans la variable d'Objet. Si vous avez quelque chose qui a besoin de faire des choses sur une ligne-par-ligne de base qui n'est pas un flux de données en soi, vous pouvez le faire maintenant, alors que la tâche de flux de données est appelée une fois pour chaque ligne. (C'est lourd, et plus approprié pour d'autres besoins que le vôtre)
Vous devriez être en mesure d'obtenir ce que vous voulez faire ci-dessus dans une Colonne Dérivée.
De référence sur le composant de Script dans le Flux de Données : http://msdn.microsoft.com/en-us/library/aa337079.aspx
Le processus que vous essayez d'atteindre dans la question peut être fait avec l'aide de la
Output Columns
dansScript Component Transformation
tâche au lieu d'utiliser les variables. L'exemple ci-dessous explique comment cela peut être réalisé et aussi il montre comment les variables peuvent être utilisées dans le composant de script. Cependant la même fonctionnalité peut être réalisé en utilisantDerived Column Transformation
tâche ainsi.Cet exemple lit un fichier CSV et sur la base de la première valeur de la colonne, il va extraire de la valeur de la deuxième colonne à partir d'une donner la position et la longueur. Toutes ces valeurs seront stockées dans une variable.
Étape-par-étape du processus:
Créer un fichier CSV comme indiqué dans la capture d'écran #1. Si la première colonne a la valeur
Customer
, nous allons extraire 6 personnages de 9 personnage sur la deuxième colonne de la valeur. Si la première colonne a la valeurVendor
, nous allons extraire 7 personnages de 21 personnage sur la deuxième colonne de la valeur. Pour toute autre valeur, le paquet va assumer la valeur zéro pour la seconde colonne valeur.Créer une table nommée
dbo.Destination
à l'aide du script sous Scripts SQL section. Le package insert au format CSV des données dans cette table.Sur le package SSIS, créer 6 variables, comme indiqué dans la capture d'écran #2. Configurer un
OLE DB connection
pour se connecter à l'instance de SQL Server. Configurer unFlat File connection
pour lire le fichier CSV comme indiqué dans les captures d'écran #3 - #6. Aussi, placer unData Flow Task
sur leControl Flow
onglet de l'emballage.Configurer l'Onglet Flux de Données avec un
Flat File Source
,Script Component Transformation Task
(Voir capture d'écran #7) et unOLE DB Destination
.Configurer le
Flat File Source
tâche, comme indiqué dans les captures d'écran #8 et #9.Configurer le
Script Component
tâche de transformation comme le montre les captures d'écran #10 et #11. Une nouvelleOutput Column
nommé SNumber de type de donnéesfour-byte signed integer [DT_I4]
est créé pour stocker la valeur extraite. Remplacer leScript Component
code avec le code affiché sousScript Component Code
section.PreExecute
méthode lit le paquet valeurs des variables et la méthodeInput0_ProcessInputRow
processus de la logique pour remplir la Colonne de SortieSNumber
.Configurer le
OLE DB Destination
tâche, comme indiqué dans les captures d'écran #12 et #13.Capture d'écran #14 montre des exemples de l'exécution du package.
Capture d'écran #15 affiche les données dans la table
dbo.Destination
après l'exécution du package.Espère que ça aide.
Scripts SQL:
.
Le Code Du Composant Script:
C# code qui peut être utilisé seulement dans
SSIS 2008 and above
..
Capture d'écran #1:
Capture d'écran #2:
Capture d'écran #3:
Capture d'écran #4:
Capture d'écran #5:
Capture d'écran #6:
Capture d'écran #7:
Capture d'écran n ° 8:
Capture d'écran n ° 9:
Capture d'écran n ° 10:
Capture d'écran #11:
Capture d'écran n ° 12:
Capture d'écran n ° 13:
Capture d'écran #14:
Capture d'écran n ° 15:
Semble que vous pouvez éviter un Composant de Script complètement ici et il suffit d'utiliser une Colonne Dérivée de la Tâche, la création de 3 nouvelles colonnes pour SNumber, RNumber et MNumber, avec une expression comme
et ainsi de suite.
Sélectionnez votre variable comme
ReadWriteVariable
sur la Transformation de l'Éditeur utilise le code ci-dessous: