2016-10-28 4 views
2

Я создал простой скрипт, который я не могу отлаживать. Вот моя проблема: Я ищу для хранения содержимого каталога в переменной в SSIS с Visual Studio 2015.Влияет на переменную объекта SSIS в задаче скрипта C#

Я создал переменную в своем пакете SSIS и задал для нее тип данных Object. Я добавил к моему пакету Задачи сценария, который содержит этот код:

#region Namespaces 
using System; 
using System.Data; 
using Microsoft.SqlServer.Dts.Runtime; 
using System.Windows.Forms; 
using System.IO; 
using System.Collections.Generic; 
#endregion 

namespace ST_c6399821104c42c2859b7b2481055848 { 

[Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] 
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { 

    public void Main() { 

     string CSVFilesCompletePath; 

     if (Dts.Variables.Contains("User::CSVFilesPathAbsolute") == true 
      && Dts.Variables.Contains("User::CSVFilesPathRelativeCountry") == true 
      && Dts.Variables.Contains("User::CSVFilesCountryObject") == true) { 

      CSVFilesCompletePath = Dts.Variables["User::CSVFilesPathAbsolute"].ToString() + Dts.Variables["User::CSVFilesPathRelativeCountry"].ToString(); 


      String[] fileListTable = Directory.GetFiles(CSVFilesCompletePath, "*.xlsx"); 
      List<string> fileList = new List<string>(fileListTable); 
      Dts.Variables["User::CSVFilesCountryObject"].Value = fileList; 
     } 

     Dts.TaskResult = (int)ScriptResults.Success; 

    } 
    #region ScriptResults declaration 
    /// <summary> 
    /// This enum provides a convenient shorthand within the scope of this class for setting the 
    /// result of the script. 
    /// 
    /// This code was generated automatically. 
    /// </summary> 
    enum ScriptResults 
    { 
     Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, 
     Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure 
     }; 
     #endregion 
    } 
} 

Как объяснено здесь: SSIS Script Task Get File Names and Store to an SSIS Object Variable

Но этот код возвращает следующее сообщение об ошибке при попытке запустить его через SSIS Работа:

SSIS C# Script Error

переменные правильно установлены в мастере сценариев, как ReadWriteVariables.

Дело в том, что мой код показывает эту ошибку, когда я пытаюсь повлиять на переменную SSIS и пытаюсь поместить в нее String[].

+0

Прошло некоторое время с тех пор, как я сделал SSIS, но, похоже, вы помните, что вы должны установить переменные для записи сценария. Ты сделал это? – AgapwIesu

+0

Да, как сказано в нижней части моего сообщения, я устанавливаю переменную как ReadWriteVarialbe в Мастере задания скриптов –

+0

Извините, пропустил это. – AgapwIesu

ответ

0

Моя ошибка была там:

CSVFilesCompletePath = Dts.Variables["User::CSVFilesPathAbsolute"].ToString() + Dts.Variables["User::CSVFilesPathRelativeCountry"].ToString(); 

Я мастерил использовать: Dts.Variables[].Value.ToString() вместо Dts.Variables[].ToString()

Как я использовал имя переменной, а не содержимого переменной, GetFiles возвратил нулевой объект и не мог быть сохранен внутри моей переменной, создавая различные ошибки.

1

Попробуйте добавить примерочных улов в вызове

Directory.GetFiles 

или во всем теле, а затем установить сообщение об ошибке и/или трассировку стека, за исключением в записи переменной SSIS для целей отладки.

Редактировать: Похож, что @ H.Fadlallah указывает на проблему. Вы должны использовать свойство Value в DtsVariable, а не ToString()

+0

Здравствуйте, спасибо за ответ. Я попытался сохранить сообщение в переменной в моей инструкции 'catch {}' с исключением, называемым 'e'. Затем попытался установить переменную следующим кодом: 'Dts.Variables [" Пользователь :: Ошибка "]. Значение = e.Message;' Но те же ошибки возвращаются в задании SSIS. Похоже, я пропускаю что-то, что позволяет мне хранить значения в переменных SSIS. –