SSIS/C#:脚本任务,用于查看目录并将1个文件的名称存储在变量中的C#脚本
基本上,我已经为SSIS中的脚本任务编写了一个C#脚本,该脚本在User::Directory中查找1个csv,如果&仅当有一个文件时,它将该文件存储在实例变量中,然后映射到SSIS的包变量 当我退出时,它会给我脚本任务的红色填充框。我认为这与我如何查看目录有关,但我不确定 请帮忙SSIS/C#:脚本任务,用于查看目录并将1个文件的名称存储在变量中的C#脚本,ssis,Ssis,基本上,我已经为SSIS中的脚本任务编写了一个C#脚本,该脚本在User::Directory中查找1个csv,如果&仅当有一个文件时,它将该文件存储在实例变量中,然后映射到SSIS的包变量 当我退出时,它会给我脚本任务的红色填充框。我认为这与我如何查看目录有关,但我不确定 请帮忙 using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using Sy
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;
}
}
}
使用系统;
使用系统数据;
使用Microsoft.SqlServer.Dts.Runtime;
使用System.Windows.Forms;
使用System.IO;
名称空间ST_E8B4BBDB4B4806B79F30644240DB19.csproj
{
[System.AddIn.AddIn(“ScriptMain”,Version=“1.0”,Publisher=”“,Description=”“)]
公共部分类ScriptMain:Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
私有字符串fileName=“”;
私有字符串根目录;
私有字符串文件路径;
枚举脚本结果
{
Success=Microsoft.SqlServer.Dts.Runtime.dtsesecresult.Success,
Failure=Microsoft.SqlServer.Dts.Runtime.dtsesecresult.Failure
};
公共脚本main()
{
RootDirictory=Dts.Variables[“RootDir”].Value.ToString();
FilePath=rootdirectory+“\\”+“SourceData”+“\\”;
}
public void setFileName()
{
DirectoryInfo YDGetDir=新的DirectoryInfo(FilePath);
FileInfo[]numberOfFiles=YDGetDir.GetFiles(“.csv”);
如果(numberOfFiles.Length<2)
{
fileName=numberOfFiles[0].ToString();
}
int fileNameLen=fileName.Length;
String temp=fileName.Substring(0,fileNameLen-5);
文件名=临时文件;
}
public void mapStateToPackage()
{
如果((文件名!=null)| |(文件名!=“”))
{
变量[“ExDFileName”]。值=文件名;
}
}
公共图书馆
{
setFileName();
mapStateToPackage();
Dts.TaskResult=(int)ScriptResults.Success;
}
}
}
这可以简单地使用Foreach循环容器来完成,如中所述,这是您要求的。:-)
无论如何,请回答有关您提供的脚本任务代码
的问题。以下提到的原因可能是问题的原因:
您正在查找.csv
。这不会返回任何结果,因为您正在查找扩展名为.csv
但没有名称的文件。标准应为*.csv
如果只查找一个文件,则条件If(numberofiles.Length<2)
应更改为If(numberofiles.Length==1)
提取文件名的if部分后的代码部分应在上述if条件内,而不是在其外侧。这样做是为了防止在空字符串上应用子字符串功能
修改后的代码可在脚本任务代码部分找到
对不起,我冒昧地简化了代码。我并不是说这是实现此功能的最佳方式,但这只是对问题的回答
希望有帮助
脚本任务代码:
C#只能在SSIS 2008及以上版本中使用的代码
/*
Microsoft SQL Server Integration Services Script Task
Write scripts using Microsoft Visual C# 2008.
The ScriptMain is the entry point class of the script.
*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
namespace ST_3effcc4e812041c7a0fea69251bedc25.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
Variables varCollection = null;
String fileName = string.Empty;
String fileNameNoExtension = string.Empty;
String rootDirectory = string.Empty;
String filePath = string.Empty;
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
Dts.VariableDispenser.LockForRead("User::RootDir");
Dts.VariableDispenser.LockForWrite("User::ExDFileName");
Dts.VariableDispenser.GetVariables(ref varCollection);
rootDirectory = varCollection["User::RootDir"].Value.ToString();
filePath = rootDirectory + @"\SourceData\";
DirectoryInfo YDGetDir = new DirectoryInfo(filePath);
FileInfo[] numberOfFiles = YDGetDir.GetFiles("*.csv");
if (numberOfFiles.Length == 1)
{
fileName = numberOfFiles[0].ToString();
fileNameNoExtension = fileName.Substring(0, fileName.LastIndexOf("."));
}
if (!String.IsNullOrEmpty(fileNameNoExtension))
{
varCollection["User::ExDFileName"].Value = fileNameNoExtension;
}
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}