如何将文件夹和子目录中的所有文件名收集到SQL Server表中

时间:2013-11-06 01:02:59

标签: sql sql-server ssis

我想知道如何做到这一点。

例如:

我有c:/temp/

在这个临时文件夹中,我有各种各样的文件和文件夹。

在temp及其子目录中收集所有文件名然后将它们插入表中最简单的方法是什么?

我计划表结构很简单。

它将:

  1. 主键
  2. 路径和文件名
  3. CreatedDate
  4. ModifiedDate
  5. DeleteDate
  6. 所以表格看起来像这样:

    Key | PathFilename            | Modified   | Created    | Delete       |   
     1  | c:\temp\fil7.txt        | 2013/02/01 | 2013/02/01 | 1900/01/01|
     2  | c:\temp\fi5e.txt        | 2013/02/01 | 2013/02/01 | 1900/01/01|
     3  | c:\temp\1ile.txt        | 2013/02/01 | 2013/02/01 | 1900/01/01|
     4  | c:\temp\2ile.txt        | 2013/02/01 | 2013/02/01 | 1900/01/01|
     5  | c:\temp\3ile.txt        | 2013/02/01 | 2013/02/01 | 1900/01/01|
     6  | c:\temp\file.txt        | 2013/02/01 | 2013/02/01 | 1900/01/01|
     7  | c:\temp\file.txt        | 2013/02/01 | 2013/02/01 | 1900/01/01|
     8  | c:\temp\file.txt        | 2013/02/01 | 2013/02/01 | 1900/01/01|
     9  | c:\temp\file.txt        | 2013/02/01 | 2013/02/01 | 1900/01/01|
    10  | c:\temp\folde1\file.txt | 2013/02/01 | 2013/02/01 | 1900/01/01|
    11  | c:\temp\folde2\file.txt | 2013/02/01 | 2013/02/01 | 1900/01/01|
    12  | c:\temp\folde4\file.txt | 2013/02/01 | 2013/02/01 | 1900/01/01|
    13  | c:\temp\folder\fil5.txt | 2013/02/01 | 2013/02/01 | 1900/01/01|
    14  | c:\temp\folder\fil6.txt | 2013/02/01 | 2013/02/01 | 1900/01/01|
    

    我可以使用SSIS工作吗?或者还有其他解决方案可以完成这项任务吗?

    是否有关于如何逐步完成此操作的教程?

    谢谢

    ps:我有一个filesystemWatcher vb.net程序,可以监视任何创建的文件和修改过的文件 但是对于最初的开始,我想用已经存在的文件填充表格。我不知道filesystemWatcher是否可以执行此初始任务?可以吗?

1 个答案:

答案 0 :(得分:1)

我会创建一个String类型的变量FolderSource,并为其赋值c:\temp

虽然你可以在一个Script Task中完成所有这一切,这是控制流中的一个对象,但我将描述如何使用Data Flow Task进行操作,因为这可能是一个更好的构造了解SSIS通常如何运作。将数据流任务拖到画布上。双击它。

在数据流任务中,添加脚本组件。我将变量FolderSource的引用添加为ReadOnly。在输入和输出中,我将输出缓冲区重命名为FS并添加了以下列。数据类型是4字节整数,字符串255,然后是日期(DT_DATE)。

enter image description here

public override void CreateNewOutputRows()
{
    string src = Variables.FolderSource;
    int key = 1;

    System.IO.FileInfo fileInfo = null;
    foreach (string currentFile in System.IO.Directory.EnumerateFiles(src, "*.*", SearchOption.AllDirectories))
    {
        fileInfo = new FileInfo(currentFile);
        FSBuffer.AddRow();

        FSBuffer.Key = key++;
        FSBuffer.PathFilename = currentFile;

        // Have UTC flavored methods too
        FSBuffer.Created = fileInfo.CreationTime;
        FSBuffer.Modified = fileInfo.LastWriteTime;
        FSBuffer.Delete = new DateTime(1900, 1, 1);
    }
}

这将使数据流向您的数据流。如果您需要执行任何数据,您现在可以添加各种组件。

一旦你操纵了数据行,就需要将它们放在某个地方。有许多目的地可用,但您可能只想使用OLE DB Destination组件。将脚本任务的输出或您使用的任何后续任务连接到目标。双击它,这将允许您按顺序指定数据库连接,表名称和列的映射。

您可能没有定义OLE DB连接管理器,因此请单击目标中的“连接管理器”按钮并创建一个新按钮。创建连接管理器后,您将选择数据应驻留的表。然后在“列”选项卡上,将源列(从“脚本组件”)映射到目标(表)。

相关问题