在SSIS 2008脚本任务中提示输入文件夹

时间:2014-02-23 06:38:46

标签: vb.net ssis folderbrowserdialog

我在这里尝试做的事情似乎很简单。在我的SSIS包的开头,我想将变量设置为提示用户的目录。这是我的VB代码:

Public Sub Main()
    Dim fldDialog As FolderBrowserDialog = New FolderBrowserDialog
    fldDialog.Description = "Select the folder..."
    fldDialog.ShowNewFolderButton = False
    fldDialog.RootFolder = Environment.SpecialFolder.MyDocuments
    If fldDialog.ShowDialog() = DialogResult.OK Then
        Dts.Variables("variable").Value = fldDialog.SelectedPath
        Dts.TaskResult = ScriptResults.Success
    Else
        MsgBox("You need to select a folder!", MsgBoxStyle.Exclamation, "Error!")
        Dts.TaskResult = ScriptResults.Failure
    End If
End Sub

当然,我在“脚本任务编辑器”中将“变量”设置为“ReadWriteVariables”,并在VB文件的顶部设置“Imports System.Windows.Forms”。

当我运行任务时,它只是坐在那里黄色(好像它正在运行),但从不显示对话框。甚至从来没有错误,只是坐在那里。我可以在标准的Windows应用程序项目中运行相同的代码没问题。

不确定这里发生了什么。知道显示一个OpenFileDialog的一个怪癖是你必须将ShowHelp属性设置为True,所以我想知道是否有另一个怪来让它运行。谷歌只是主要向我展示一个老问题,其中文件夹树是空白的,但我甚至没有得到提示。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我知道这有点晚了,但是我遇到了这个问题并找到了解决方法。 (使用C#)
您需要使用“ OpenFileDialog”而不是“ FolderBrowserDialog”,并且需要进行一些调整。这是一个示例代码,可打开资源管理器并让您选择一个文件夹:

public void Main()
    {

        string myPath="";
        OpenFileDialog folderBrowser = new OpenFileDialog();
        folderBrowser.ValidateNames = false;
        folderBrowser.CheckFileExists = false;
        folderBrowser.CheckPathExists = true;
        folderBrowser.FileName = "Folder Selection.";
        folderBrowser.ShowHelp = true;
        if (folderBrowser.ShowDialog() == DialogResult.OK)
        {
            myPath = Path.GetDirectoryName(folderBrowser.FileName);
        }
        else
        {
            MessageBox.Show("Error bei Pfadauswahl");
        }
        Dts.Variables["User::varFolderPath"].Value = myPath;
        Dts.TaskResult = (int)ScriptResults.Success;
    }

最重要的语句是“ folderBrowser.ShowHelp = true”语句。如果不执行此作业,则会遇到与问题相同的问题。
您还需要上面的语句来“欺骗”对话框,以便可以选择文件夹而不是文件。
希望我能为您或有同样问题的人提供帮助,但您应该像“ N West”所说的那样将文件夹作为变量传递到软件包中。