如何插入文件夹中可用文件的表格列表

时间:2017-03-07 19:58:51

标签: c# sql sql-server ssis ssis-2008

作为标题,我想在SQL表中插入使用C#的文件夹中可用的文件列表。所有文件都是CSV。

在脚本结束时,我找不到任何记录,但我没有任何错误代码。 我想将此代码用于ssis脚本。

 SqlConnection theSqlServer = new SqlConnection(@"Server=sql\insta; Database=database; Trusted_Connection=True;");
 theSqlServer.Open();

 SqlCommand theSqlCommand = new SqlCommand("INSERT INTO [File] ([FileName]) VALUES (" + fileName + " )", theSqlServer);

 MessageBox.Show(fileName);
 theSqlServer.Close();

请你能帮我找一下这段代码中的错误吗?

2 个答案:

答案 0 :(得分:0)

如果您有权访问SQL Server Profiler,您可以捕获服务器再次发出的实际SQL语句(如果实际发出了一个!)

答案 1 :(得分:0)

首先,你创建了一个SqlCommand,但是你没有执行它,你需要使用theSqlCommand.ExecuteNonQuery()

使用SSIS实现此目的的另一种方法 (更好的方式)

使用SQL任务实现此目的不是最佳做法(它将为每个命令打开一个连接,并且您的查询未参数化,因此您拥有SQL Injection ALERT!!

在SSIS中,您可以执行以下操作:

假设您已将 OLEDB连接管理器添加到要导入数据的SQL服务器

  1. 添加类型为User::FolderPath的SSIS变量System.String,其值等于包含CSV文件的旧路径
  2. 添加数据流任务DFT Import
  3. 在dataFlow任务内添加s Script Component(将其用作源)
  4. 在脚本组件中添加类型OutFileName的输出列DT_WSTR,长度= 4000
  5. User::FolderPath变量添加到脚本ReadOnlyVariables
  6. 在脚本窗口中编写以下代码(我使用的是Vb.net)

    Private strFolderPath As String = String.Empty
    Public Overrides Sub PreExecute()
    
        MyBase.PreExecute()
    
        strFolderPath = Variables.RowCount
    
    End Sub
    
    Public Overrides Sub CreateNewOutputRows()
    
        Dim strFiles() As String = IO.Directory.GetFiles(strFolderPath, "*.csv", IO.SearchOption.AllDirectories)
    
        For Each strFiles As String In strFiles
    
            With Output0Buffer
    
                .AddRow()
                .OutFilename = strFiles
    
            End With
    
        Next
    
    End Sub
    
  7. 添加OLEDB Destination

  8. 将脚本输出连接到OLEDB Connection