2016-08-15 4 views
0

사용자 변수에리스트를 할당하려했지만 작동하지 않습니다. 다음은 코드입니다. 무엇이 잘못 될 수 있습니까?리스트 변수에 할당

System.RuntimeMethod Handle.InvokeMethod에서
StreamReader r = new StreamReader(Dts.Variables["User::filepath"].Value.ToString()) 
{ 
    string[] a = r.ReadLine().Split(';'); 
    List<string> list = new List<string>(a);    
    Dts.Variables["User::firstRow"].Value = list; 
} 

(O bject 타겟 [] 인수 서명 SIG, 부울 생성자 개체) System.Reflection.Ru ntimeMethodInfo.Unsaf eInvokeInternal에서를 (Objec t OBJ이 Object [] 파라미터는 오브젝트 [] System.Reflection.Ru ntimeMethodInfo.Invok 전자 (객체 (OBJ), BindingFlags의 invokeAttr 바인더 바인더의 인수) 시스템에서 [] 파라미터 은 CultureInfo 문화) 개체 .RuntimeType.I nvokeMember (문자열 이름, BindingFlags bindingFlags, 바인더 바인더, Object 대상, Object [] 제공됨) 인수, ParameterModifier [] 수식은 CultureInfo 문화, 문자열 [] Microsoft.SqlServer. Dts.Tasks.ScriptTask. VSTATaskScriptingEngi ne.ExecuteScript()에서 namedParams)

오류하다 내가 스크립트에서 스크립트를 실행할 때

+0

"작동하지 않는 것 같습니다"를 정의하십시오. 오류가 있습니까? System.RuntimeMethodHandle.InvokeMethod에서 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal에서 (객체 타겟 [] 인수 서명 SIG, 부울 생성자 개체) –

+0

하는 System.Reflection에서 를 (오브젝트 OBJ [] 인자 객체 [] 매개 개체) .RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, 바인더 바인더, Object [] 매개 변수, CultureInfo culture) – hln

+0

at System.RuntimeType.Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()에서 InvokeMember (String name, BindingFlags bindingFlags, Binder 바인더, Object 대상, Object [] 제공된 Args, ParameterModifier [] 수정 자, CultureInfo culture, String [] namedParams) 메시지에서 스크립트를 실행할 때 오류가 발생했습니다 – hln

답변

0

지금 List 객체를 user :: firstrow 변수에 전달하려고합니다. 가변 객체 유형입니까? 정말로 전체 객체를 전달하고 싶습니까?

나는 변수가 "firstrow"라고 말하고 실제로 목록의 첫 번째 문자열 만 원하는 경우에만 적절한 인덱스를 지정한다고 생각합니다.

그래서 변경 :

Dts.Variables["User::firstRow"].Value = list; 

이 답변은 목록 개체를 사용할 수 있습니다 것 같습니다 how to use list collection for "foreach" in SSIS에 따라 의견

당 편집

Dts.Variables["User::firstRow"].Value = list[0]; 

합니다. 나는 실제로 그것을 시도한 적이 없지만 레코드 세트를 지나쳤습니다. 그러나 변수가 객체이면 해당 링크에 따라 목록을 저장해야합니다. 그렇다면 몇 가지 다른 잠재적 인 문제가 있습니다. 1 User :: firstrow가 스크립트에 사용할 수있는 ReadWriteVariable로 나열되어 있지 않으면 User :: filepath가 ReadOnlyVariable로 나열되지 않습니다 ... 읽을 행이 있는지 테스트하지 않고 있습니다. Tab is right there 오류가 더 있습니다 그리고 나는 디버깅이 ssis 스크립트에 대해 어렵다는 것을 알고 있습니다. 그러나 System.Windows.Forms.MessageBox.Show()를 사용하여 예외를 표시 할 수 있습니다. Try Catch Block에서 모든 것을 마무리하고 catchBox에서 MessageBox.Show (exception.TosTring())를 수행하십시오. 그래서 이런 식으로 뭔가 :

using System.Windows.Forms; 

try 
{ 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString()); 
    throw; 
} 

이 모든 다음 foreach 루프 변수를 설정하는 것에 통과 한 행에 대한 스크립트 작업에서 목록을 가지고 있기 때문에 당신이 생각해야 할 시도하는 것에 대한 질문을 구걸? C# 스크립트에서 직접 변수를 설정하는 것이 가장 쉽습니다 ......

+1

varaible은 객체 유형입니다. 리스트는리스트이고, 나는 전체리스트를 변수 instaed에 전달하고자합니다. 가능한가? – hln

+0

몇 가지 추가 질문/의견으로 답변을 업데이트했습니다. – Matt