6
votes

Comment boucle via un objet générique dans la tâche du script SSIS

J'ai un objet générique qui est transmis dans une tâche de script à partir d'un processus SQL. L'objet sera essentiellement une table de données, mais afin d'obtenir le résultat complet du processus SQL, je dois le stocker dans un objet générique.

Donc, si j'ai: p>

Object A = Dts.Variables[0];
strin x = A.Column[0].value.tostring();


0 commentaires

5 Réponses :


3
votes

Suggestion n ° 1: Variables d'accès par nom, Index numérique non numérique.

Suggestion n ° 2: Consultez le résultat de la propriété Value sur le type d'objet que vous attendez.

Ainsi: < / p> xxx


2 commentaires

Non; C'est l'opérateur C # comme . C'est comme une opération de distribution, mais renvoie null si la distribution ne peut pas être faite. Voir msdn.microsoft.com/en-us/library/cscsdfbt.aspx Pour plus de détails.


Mercy, c'est pratique. Cela simplifie certainement une certaine logique que j'ai dans les bibliothèques d'accès aux données.



9
votes

Il n'y a rien de mal à analyser une table de données d'un objet. J'ai vu Andy Leonard Faites-le sur ses frameworks ETL.

Vous étiez sur le chemin correct, mais vous ne voyez pas la photo entière. Ce code attribue l'objet de type variable (environ) Pour A. Vous essayez ensuite d'accéder à une propriété qui n'existe pas. xxx

Votre besoin de saisir la valeur de la variable. Vous pouvez le faire soit comme l'affectation à un xxx

ou si vous avez besoin de faire autre chose avec la variable réelle, vous gardez votre affectation de code actuelle d'un accès à l'autre. La propriété de valeur. xxx

Le code ci-dessus pour le jeu de données / datawow est approximatif. L'emporter important est d'accéder aux goodies une variable SSIS tient, vous devez accéder à la valeur de l'objet.


1 commentaires

Downvoter, soin de m'aider à comprendre ce qui devrait être fait pour améliorer cette réponse?



12
votes

Je n'ai pu obtenir aucune des réponses ci-dessus au travail, la liste ci-dessous est donc le code que j'ai utilisé pour charger le datable. "Utilisateur :: transactionalrepdbs" est une variable SSIS d'objet (System.Object) chargée via un "jeu de résultats complet" à partir d'un script de tâche SQL exécuté. La tâche de script utilisé est C #. Ce lien m'a assisté.

using System.Data.OleDb;

DataTable dt= new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.Fill(dt, Dts.Variables["User::transactionalRepDBs"].Value);
String _showMe;

foreach (DataRow row in dt.Rows)
{
   //insert what you want to do here
           for (int i = 0, _showMe = ""; i < row.ItemArray.Length; i++ )
           {
               _showMe += row.ItemArray[i].ToString() + " | ";
           }

           MessageBox.Show("Data row #" + dt.Rows.IndexOf(row).ToString() + " value: " + _showMe);
}


0 commentaires

1
votes

Un homme génial,

Ceci fonctionne parfaitement bien .. xxx


0 commentaires

0
votes
         // Works Perfectly fine ....ssis , c#
             DataTable dt = new DataTable();
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.Fill(dt, Dts.Variables["User::VariableObj"].Value);


        foreach (DataColumn cols in dt.Columns)
        {
            MessageBox.Show("Colum Name = " + cols.ToString());

        }


            foreach (DataRow row in dt.Rows)
            {

                MessageBox.Show( "rows ID =  " + row[0].ToString() + " rows       
                Name =  " + row[1].ToString());
              }

1 commentaires

Tandis que cet extrait de code peut résoudre la question, y compris une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, et ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.