SSIS/C#: Tâche de Script, C# script pour regarder répertoire et stocker le nom de l'1 fichier dans une variable
Fondamentalement, j'ai écrit un C# script pour une tâche de Script dans SSIS qui ressemble à un Utilisateur::Répertoire pour 1 csv, si & seulement si il existe un fichier, on stocke dans la variable d'instance qui associe ensuite les variables de package de SSIS.
Quand je exicute, ça me donne le rouge rempli dans la boîte de la tâche de Script. Je pense que c'est lié à la façon dont je suis à la recherche de l'annuaire, mais je ne suis pas sûr.
S'il vous plaît aider!
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
namespace ST_e8b4bbbddb4b4806b79f30644240db19.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
private String fileName = "";
private String RootDirictory;
private String FilePath;
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
public ScriptMain()
{
RootDirictory = Dts.Variables["RootDir"].Value.ToString();
FilePath = RootDirictory + "\\" + "SourceData" + "\\";
}
public void setFileName()
{
DirectoryInfo YDGetDir = new DirectoryInfo(FilePath);
FileInfo[] numberOfFiles = YDGetDir.GetFiles(".csv");
if (numberOfFiles.Length < 2)
{
fileName = numberOfFiles[0].ToString();
}
int fileNameLen = fileName.Length;
String temp = fileName.Substring(0, fileNameLen - 5);
fileName = temp;
}
public void mapStateToPackage()
{
if((fileName!=null)||(fileName!=""))
{
Dts.Variables["ExDFileName"].Value = fileName;
}
}
public void Main()
{
setFileName();
mapStateToPackage();
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
Vous devez vous connecter pour publier un commentaire.
Cela pourrait tout simplement être fait à l'aide de
Foreach loop container
comme expliqué dans ce Débordement de Pile question, qui a été demandé par vous. 🙂De toute façon, pour répondre à votre question concernant
Script Task code
que vous avez fournis. Mentionnés ci-dessous raisons pourrait être la cause de problèmes:Vous êtes à la recherche pour
.csv
. Ce ne retourne aucun résultat parce que vous êtes à la recherche d'un fichier n'ayant pas de nom mais l'extension.csv
. Les critères devraient être *.csvSi vous êtes à la recherche d'exactement un fichier, alors la condition
if (numberOfFiles.Length < 2)
doit être modifié pourif (numberOfFiles.Length == 1)
La section de code après la si section qui extrait le nom du fichier doit être dans le mentionné ci-dessus si état et pas à côté d'elle. Ce qui doit être fait pour empêcher l'application de la sous-chaîne des fonctionnalités sur une chaîne vide.
Code modifié peut être trouvé sous le Tâche de Script Code section.
Désolé, j'ai pris la liberté de simplifier un peu le code. Je suis ne suggère pas c'est la meilleure façon de faire de cette fonctionnalité, mais c'est
merely an answer
à la question.Espère que ça aide.
Script Code De La Tâche:
C# code qui peut être utilisé seulement dans
SSIS 2008 and above
.