2017-10-31 20 views
0

foreach loop 컨테이너를 사용하여 File System Task을 사용하여 패키지를 만들었습니다. 여러 파일을 이동하고 이름을 바꿔야합니다.SSIS 파일 시스템 작업 오류

원본 및 대상의 여러 변수를 사용하고 있습니다. 및 파일 이름. 그것은 변수가 잘 정의 된 것으로 보인다. 모두 V- 드라이브를 가리 킵니다.

패키지를 실행하려고, 에러 제공 : 실제로 C 드라이브 \ 프로그램 파일에려고 왜 내가 분명하고 완전하게 정의한 동안

"[File System Task] Error: An error occurred with the following error message: "Could not find file 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\destination_Filename.pdfFilename.pdf'."

내가 알아낼 수 없습니다를 출발지와 목적지 모두 다른 경로.

누구든지 도와 드릴 수 있습니까?

+0

난 당신이 foreach 루프의 각 패스와 파일 이름을 정의하는 연결 문자열에 대한 식의 변수를 적용 있으리라 믿고있어. 표현식이 속성 아래에서 활성화되어 있습니까? 그렇지 않으면 이것이 C : default를 계속 적용하는 이유가 될 수 있습니다. 파일 "C : \ ...."을 정의하는 변수 중 하나의 기본값은 무엇입니까? – user3662215

+0

프로젝트 경로가 지정되지 않은 경우 기본 위치가 사용됩니다. 내가 시도하고 변수를 디버그 ... 가장 가능성이 foreach 귀하의 선택 경로를보고되지 않습니다. –

+0

@ user3662215 : 글쎄요, 확실하지 않습니다. 속성에서 어디에서 찾을 수 있습니까? – Turpan

답변

0

오류는 표현식이 평가되지 않는다는 오류입니다. 디버깅하는 가장 좋은 방법은 각 루프마다 Script task (C#)을두고 변수를 전달하여 인쇄하는 것입니다. 인쇄 할 스크립트 :

이렇게하면 문제가 즉시 해결되지 않지만 변수로드 이후 또는 그 이전에 문제가 지속되면 검사 점이 제공됩니다.

+0

스크립트 작업을 삽입했지만 작동하지 않았습니다. 내가 공개 한 부분을 너의 것으로 바꿨으니 이제는 스크립트가 이렇게 생겼어? – Turpan

+0

예 ... 모든 것을 그대로 두십시오. 단지'string' 라인과'MessageBox' 라인을'// TODO : 코드를 여기에 추가하십시오'를 추가하십시오. –

0

스크립트 작업 :

#region Help: Introduction to the script task 
/* The Script Task allows you to perform virtually any operation that can be accomplished in 
* a .Net application within the context of an Integration Services control flow. 
* 
* Expand the other regions which have "Help" prefixes for examples of specific ways to use 
* Integration Services features within this script task. */ 
#endregion 


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

namespace ST_e5bcf69902754e9cb85594ea888a4d08 
{ 
    /// <summary> 
    /// ScriptMain is the entry point class of the script. Do not change the name, attributes, 
    /// or parent of this class. 
    /// </summary> 
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] 
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase 
    { 
     #region Help: Using Integration Services variables and parameters in a script 
     /* To use a variable in this script, first ensure that the variable has been added to 
     * either the list contained in the ReadOnlyVariables property or the list contained in 
     * the ReadWriteVariables property of this script task, according to whether or not your 
     * code needs to write to the variable. To add the variable, save this script, close this instance of 
     * Visual Studio, and update the ReadOnlyVariables and 
     * ReadWriteVariables properties in the Script Transformation Editor window. 
     * To use a parameter in this script, follow the same steps. Parameters are always read-only. 
     * 
     * Example of reading from a variable: 
     * DateTime startTime = (DateTime) Dts.Variables["System::StartTime"].Value; 
     * 
     * Example of writing to a variable: 
     * Dts.Variables["User::myStringVariable"].Value = "new value"; 
     * 
     * Example of reading from a package parameter: 
     * int batchId = (int) Dts.Variables["$Package::batchId"].Value; 
     * 
     * Example of reading from a project parameter: 
     * int batchId = (int) Dts.Variables["$Project::batchId"].Value; 
     * 
     * Example of reading from a sensitive project parameter: 
     * int batchId = (int) Dts.Variables["$Project::batchId"].GetSensitiveValue(); 
     * */ 

     #endregion 

     #region Help: Firing Integration Services events from a script 
     /* This script task can fire events for logging purposes. 
     * 
     * Example of firing an error event: 
     * Dts.Events.FireError(18, "Process Values", "Bad value", "", 0); 
     * 
     * Example of firing an information event: 
     * Dts.Events.FireInformation(3, "Process Values", "Processing has started", "", 0, ref fireAgain) 
     * 
     * Example of firing a warning event: 
     * Dts.Events.FireWarning(14, "Process Values", "No values received for input", "", 0); 
     * */ 
     #endregion 

     #region Help: Using Integration Services connection managers in a script 
     /* Some types of connection managers can be used in this script task. See the topic 
     * "Working with Connection Managers Programatically" for details. 
     * 
     * Example of using an ADO.Net connection manager: 
     * object rawConnection = Dts.Connections["Sales DB"].AcquireConnection(Dts.Transaction); 
     * SqlConnection myADONETConnection = (SqlConnection)rawConnection; 
     * //Use the connection in some code here, then release the connection 
     * Dts.Connections["Sales DB"].ReleaseConnection(rawConnection); 
     * 
     * Example of using a File connection manager 
     * object rawConnection = Dts.Connections["Prices.zip"].AcquireConnection(Dts.Transaction); 
     * string filePath = (string)rawConnection; 
     * //Use the connection in some code here, then release the connection 
     * Dts.Connections["Prices.zip"].ReleaseConnection(rawConnection); 
     * */ 
     #endregion 


     /// <summary> 
     /// This method is called when this script task executes in the control flow. 
     /// Before returning from this method, set the value of Dts.TaskResult to indicate success or failure. 
     /// To open Help, press F1. 
     /// </summary> 
     public void Main() 
     { 
      string strMessage = Dts.Variables["User::test"].Value.ToString(); 
      MessageBox.Show(strMessage); 

      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 

    } 
} 
+0

변수 이름을 바꿔야합니다. 데모로'test'를 사용했습니다. –

+0

네, 지금은 효과가 있었어요, 고마워요. – Turpan