所以我现在正在制作一个SSIS包,需要我还有一些工作要做。该软件包当前只有一个For Each循环容器,它将在User :: WatchFolder中找到的文件名的值存储到变量中,然后将该文件移动到另一个文件夹以供进程选取。我的任务是增加这一点,以便.837文件的进程保持不变,该文件不包含某组字符,但重定向通过单词' RELAY'在他们中。从那里我还需要打开这个EDI文件并替换字符串' 5010'使用' 5010R',保存并移至单独的文件夹。
我已使用条件拆分基于某些条件在数据流任务中移动数据,但这不是来自表或数据库的数据,因此我不确定是否可以在控制流任务中完成此操作。此外,我假设可以通过脚本任务替换字符串,但我不确定(再次)这是否会存在于控制流或某种数据流任务中。
到目前为止这是包的样子。
SSIS Package so far
public void Main()
{
String ErrInfo = "";
String FilePath = Dts.Variables["User::FileName"].Value.ToString();
try
{
String FileContent; //Variable to store File Contents
FileContent = ReadFile(FilePath, ErrInfo);
if (ErrInfo.Length > 0)
{
Dts.Log("Error while reading File " + FilePath, 0, null);
Dts.Log(ErrInfo, 0, null);
Dts.TaskResult = (int)ScriptResults.Failure;
return;
}
//FileContent Before Replace;
MessageBox.Show(FileContent);
//Find and Replace --> Modify WHERE clause
FileContent = FileContent.Replace(
"Relay5010 ",
"Relay5010R"
);
//FileContent After Replace;
MessageBox.Show(FileContent);
Dts.Variables["User::FileContent"].Value = FileContent;
//Write the contents back to File
WriteToFile(FilePath, FileContent, ErrInfo);
if (ErrInfo.Length > 0)
{
Dts.Log("Error while writing File " + FilePath, 0, null);
Dts.Log(ErrInfo, 0, null);
Dts.TaskResult = (int)ScriptResults.Failure;
return;
}
}
catch (Exception e)
{
Dts.Log(e.Message, 0, null);
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
public String ReadFile(String FilePath, String ErrInfo)
{
String strContents;
StreamReader sReader;
try
{
sReader = File.OpenText(FilePath);
strContents = sReader.ReadToEnd();
sReader.Close();
return strContents;
}
catch (Exception e)
{
MessageBox.Show(ErrInfo);
ErrInfo = e.Message;
return "";
}
}
public void WriteToFile(String FilePath, String strContents, String ErrInfo)
{
StreamWriter sWriter;
try
{
sWriter = new StreamWriter(FilePath);
sWriter.Write(strContents);
sWriter.Close();
}
catch (Exception e)
{
MessageBox.Show(ErrInfo);
ErrInfo = e.Message;
}
}
#region ScriptResults declaration
/// <summary>
/// This enum provides a convenient shorthand within the scope of this class for setting the
/// result of the script.
///
/// This code was generated automatically.
/// </summary>
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
}
}
事实是,我喜欢单独保留现有文件,让他们沿着正常路径奔跑,只是转移包含&#34; R&#34;值和那些可以应用脚本任务。除了另一个脚本任务之外,还有其他方法吗?我只是想看看SSIS是否为我提供了另一种工具,以便能够以最直接的方式完成这项工作
这是我发布的第一个问题,所以如果我在这里错过了其他的东西,如果有人指出我就不会被冒犯!