在SSIS脚本任务

时间:2016-09-07 13:08:41

标签: c# sql-server linq ssis

我正在尝试循环浏览文件夹。每个文件的后缀都可以在SQL表的列中找到。此后缀是我的LINQ语句的WHERE,是脚本任务中的变量(显示在注释中)。如果谓词为真,我希望它从SQL表中同一行的另一列返回值,并将另一列的值分配给我的脚本任务中的另一个变量。现在我只是在做一个MessageBox.Show来测试。

我在我的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);            
    }
}

1 个答案:

答案 0 :(得分:0)

姆兰,

您需要向我们提供有关Table对象的更多信息。没有代码可以将数据从数据库中获取到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

回复并澄清您的问题以获得更多帮助。