2016-09-07 80 views
0

我试图循环访问一个文件夹。每个文件的后缀都可以在SQL表的列中找到。这个后缀是我的LINQ语句的WHERE,并且是脚本任务中的一个变量(显示在注释中)。在谓词为真的情况下,我希望它从SQL表中同一行的另一列返回值,并将其他列的值分配给脚本任务中的另一个变量。现在我只是在做一个MessageBox.Show测试。在SSIS脚本任务中使用LINQ将值赋给变量

我在我的SSIS包中建立了一个OLEDB连接管理器,我不知道如何在任务内部运行LINQ查询,我想我在如何设置连接时缺少一些东西。任何指针都会被感激地收到。这里有多远,我有:

public void Main() 
{ 
    string sourcePath = Dts.Variables["User::sourcePath"].Value.ToString(); 
    string archivePath = Dts.Variables["User::archivePath"].Value.ToString(); 
    string destinationPath = Dts.Variables["User::archivePath"].Value.ToString(); 

    SqlConnection conn = new SqlConnection(); 
    conn = (SqlConnection)(Dts.Connections["Server.Database"].AcquireConnection(Dts.Transaction) as SqlConnection); 

    DirectoryInfo directoryInfo = new DirectoryInfo(sourcePath); 
    FileInfo[] files = directoryInfo.GetFiles(); 

    foreach (FileInfo fileInfo in files) 
    { 
     string fileName = fileInfo.ToString(); 
     fileName = fileName.Split('_')[0]; // File Suffix 
     string destinationPrefix = ""; 
     // LINQ HERE USING fileName variable: 
     //destinationPrefix = FROM t in Table where t.Column == fileName select destinationPrefixColumn 
     MessageBox.Show(destinationPrefix);    
    } 
} 

回答

0

伊姆兰,

你需要给我们的表对象的更多信息。没有代码可以将数据从数据库中获取到Table变量中。

var query = "Select * from SomeTable Where SomeCondition Order by Somefields"; 
var Table = conn.ExecuteQuery(query); 

这将得到一个表,您可以扫描fileinfo循环内。既然你没有告诉我们什么字段需要查看扩展名,或者你正在处理源文件夹和目标文件夹。我可以不再提供任何代码。另外,看看在FileInfo对象有些事情可能是有用的...

fileInfo.FileName //Name of file 
fileInfo.FullName // full path and name of file 
fileInfo.Extension // just the extension 
fileInfo.MoveTo() // will move file to new location 
fileInfo.CopyTo() // will copy file to new location 

后回来,澄清你的问题得到更多的帮助。