sql-server - 文件扩展名脚本任务和错误处理

标签 sql-server vb.net ssis etl script-task

我几乎没有使用 VB 脚本或 C# 的经验。我使用一些符合我目的的在线教程创建了这个 SSIS 包,但我必须对其进行微调以满足我的要求。

当前场景:

我正在尝试运行一个 SSIS 包,它有一个 for-each 循环容器,它在目录中导入扩展名为 *.txt 的文件,因为文件名不是固定的。这个 for-each 循环容器之后是一些其他 SQL 任务。

即使目录中没有文件,包也会成功执行(可能是我在创建容器和数据流任务、文件系统任务时做错了什么)。这会导致 for-each 循环容器末尾的 SQL 脚本成功执行,从而导致错误数据。

要求:
如果目录中没有文件,包应该失败。我必须在 for-each 循环容器之前实现一个脚本,但不确定该怎么做。任何线索将不胜感激!

我做了类似的事情,但不确定如何搜索 wrt 扩展名而不是文件名:

Public Sub Main()
    '
    ' Add your code here
    '
    Dim fileName As String
    fileName = "filename.txt"

    If System.IO.File.Exists(fileName) Then
        Dts.Variables("User::bolFileExists").Value = True
    Else
        Dts.Variables("User::bolFileExists").Value = False
    End If

    Dts.TaskResult = ScriptResults.Success
End Sub

最佳答案

您应该使用 System.IO.Directory.GetFiles() 函数。

If System.IO.Directory.GetFiles(<your path goes here>, "*.txt", SearchOption.AllDirectories).Length = 0 Then 
   Dts.Variables("User::bolFileExists").Value = False
Else
    Dts.Variables("User::bolFileExists").Value = True
End If

关于sql-server - 文件扩展名脚本任务和错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54190927/

相关文章:

c# - Entity Framework VS Ado.net

c# - 如何使用 SQL 填充 Crystal Reports

.net - LINQ Order BY 在 VB.NET 中使用文字值?

ssis - 在没有 Foreach 的情况下复制 SSIS 中的所有文件

sql-server - 选择对象具有某些属性的所有日期

sql - 获取日期 SQL Server 的最大可能时间

sql-server - ALTER STATEMENT 中关键字 'SET' 附近的语法不正确

sql-server - 获取将数据加载到数据库表中的 SSIS 包

c# - 使用 C# 执行 SSIS 包时出错

Ssis将字符串类型的变量转换为Int32