2017-10-20 13 views
0

Existe-t-il un moyen de référencer une source de données csv ou autre avec des noms de table et des requêtes source pour générer des documents BIML?Utilisation d'une source externe pour alimenter BIML

Merci

+0

Oui. Afficher des exemples de données et comment vous souhaitez l'utiliser pour créer des packages et des tâches – billinkc

Répondre

1

SACHEZ BIEN C# est pas mon point fort et ci-dessous pourrait bien ne pas être le moyen idéal de le faire. Si vous trouvez quelque chose de plus approprié, je voudrais bien entendre parler :)


La meilleure façon que je l'ai trouvé inclure des métadonnées basé CSV dans mes projets BIML pour les charger en C# DataTable objets que je référence dans mon Biml comme un objet variable C#, qui joue très bien avec foreach pour parcourir les lignes.

En supposant que vous savez comment inclure C# dans vos projets BIML (soit dans le fichier directement ou par l'intermédiaire référencé fichier .cs), vous pouvez utiliser le code suivant:

public static DataTable FlatFileToDataTable(string filePath, char delimiter) 
{ 
    DataTable dt = new DataTable(); 

    using (StreamReader sr = new StreamReader(filePath)) 
    { 
     string[] headers = sr.ReadLine().Split(delimiter); 

     foreach (string header in headers) 
     { 
      dt.Columns.Add(header); 
     } 
     while (!sr.EndOfStream) 
     { 
      string[] rows = sr.ReadLine().Split(delimiter); 
      DataRow dr = dt.NewRow(); 
      for (int i = 0; i < headers.Length; i++) 
      { 
       dr[i] = rows[i]; 
      } 
      dt.Rows.Add(dr); 
     } 
    } 
    return dt; 
} 

Je pense que pour pouvoir utiliser la StreamReader, vous devrez également ajouter using System.IO; à votre fichier de code.

utilisation serait de définir un objet DataTable et le remplir avec le résultat de ce qui précède, puis de faire référence à l'aide d'extraits de code au sein de votre BIML:

DataTable YourDataTable = FlatFileToDataTable("<Path to CSV file>",'<Value Delimiter>'); 

... 

<Columns> 
<# foreach(DataRow r in YourDataTable.Rows){ #> 
    <Column Name="<#=r["YourColumnName"]#>" etc /> 
<# } #> 
</Columns>