2016-07-24 5 views
0

SSIS (Visual Studio 2015) 스크립트 구성 요소 (C# 2015)를 사용하여 웹 요청을하고 있습니다. 응답은 다운로드 할 CSV 파일에 대한 링크를 제공합니다. 링크를 사용하여 OLEDB 대상의 SQL 데이터베이스에 출력하는 CSV 파일을 스트리밍합니다. CSV 파일은 1000 행으로 나뉩니다.(SSIS) 스크립트 구성 요소 "인덱스가 배열 경계를 벗어났습니다."

이 스크립트는 각 데이터 흐름마다 한 번씩, 각 테이블마다 하나의 데이터 흐름, 총 12 개의 데이터 흐름으로 실행됩니다. 일부는 문제없이 작동하지만 일부는 일부 CSV를로드 한 후이 문제를 보게됩니다.

{"files":["https://sample.url.com/raw/fetch/451cf3ecc1/raw-0.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-1.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-2.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-3.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-4.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-5.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-6.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-7.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-8.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-9.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-10.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-11.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-12.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-13.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-14.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-15.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-16.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-17.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-18.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-19.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-20.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-21.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-22.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-23.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-24.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-25.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-26.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-27.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-28.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-29.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-30.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-31.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-32.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-33.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-34.csv","https://sample.url.com/raw/fetch/451cf3ecc1/raw-35.csv"],"info":["Defaulted to 'UTC' timezone"],"warn":["Truncated 'to' - dropped hours, minutes and seconds. Was 1469121708000, Used 1469059200000"]} 
:

오류는 스크립트 코드가

public override void CreateNewOutputRows() 
{ 
    /* 
     Add rows by calling the AddRow method on the member variable named "<Output Name>Buffer". 
     For example, call MyOutputBuffer.AddRow() if your output was named "MyOutput". 
    */ 
    var request = WebRequest.Create(Variables.urlparameter); 
    request.ContentType = "application/json; charset=utf-8"; 
    string responseText; 
    string[] fileArray; 
    var response = (HttpWebResponse)request.GetResponse(); 

    using (var sr = new StreamReader(response.GetResponseStream())) 
    { 
     responseText = sr.ReadToEnd(); 
     string responseCleaned = responseText.Substring(responseText.IndexOf('[') + 1, responseText.IndexOf(']') - responseText.IndexOf('[') - 1).Replace("\"", ""); 
     fileArray = responseCleaned.Split(','); 
    } 

    foreach (string file in fileArray) 
    { 
     HttpWebRequest fileReq = (HttpWebRequest)HttpWebRequest.Create(file); 
     HttpWebResponse fileResp = (HttpWebResponse)fileReq.GetResponse(); 
     using (Stream fileStream = fileResp.GetResponseStream()) 
     { 
      StreamReader reader = new StreamReader(fileStream, Encoding.UTF8); 
      string responseString = reader.ReadToEnd(); 
      string[] responseRows = responseString.Split(new string[] { "\"\r\n\"", "\"\n\"" }, StringSplitOptions.None); 
      foreach (string row in responseRows.Skip(1)) 
      { 
       Output0Buffer.AddRow(); 
       string[] responseColumns = row.Split(new string[] { "\",\"" }, StringSplitOptions.None); 
       Output0Buffer.caseid = responseColumns[0]; 
       Output0Buffer.assignedfrom = responseColumns[1]; 
       Output0Buffer.groupname = responseColumns[2]; 
       Output0Buffer.createdate = responseColumns[3]; 
       Output0Buffer.createday = responseColumns[4]; 
       Output0Buffer.audittype = responseColumns[5]; 
       Output0Buffer.minimpact = responseColumns[6]; 
       Output0Buffer.casetype = responseColumns[7]; 
       Output0Buffer.auditid = responseColumns[8]; 
       Output0Buffer.impact = responseColumns[9]; 
       Output0Buffer.cti = responseColumns[10]; 
       Output0Buffer.createhour = responseColumns[11]; 
       Output0Buffer.assignedtoindividual = responseColumns[12]; 
       Output0Buffer.closurecode = responseColumns[13]; 
       Output0Buffer.contacttime = responseColumns[14]; 
       Output0Buffer.impact12time = responseColumns[15]; 
       Output0Buffer.region = responseColumns[16]; 
       Output0Buffer.requesterlogin = responseColumns[17]; 
       Output0Buffer.resolution = responseColumns[18]; 
       Output0Buffer.resolvedby = responseColumns[19]; 
       Output0Buffer.resolveddate = responseColumns[20]; 
       Output0Buffer.rootcause = responseColumns[21]; 
       Output0Buffer.rootcausedetails = responseColumns[22]; 
       Output0Buffer.prioritylabel = responseColumns[23]; 
       Output0Buffer.ecd = responseColumns[24]; 
       Output0Buffer.dedupekey = responseColumns[25]; 
       Output0Buffer.groupmanagerlogin = responseColumns[26]; 
       Output0Buffer.assigneemanagerlogin = responseColumns[27]; 
       Output0Buffer.site = responseColumns[28]; 
       Output0Buffer.status = responseColumns[29]; 
       Output0Buffer.timespent = responseColumns[30]; 
       Output0Buffer.initialescalationtime = responseColumns[31]; 
       Output0Buffer.lastmodifieddate = responseColumns[32]; 
       Output0Buffer.totaltimespent = responseColumns[33]; 
       Output0Buffer.referenceinfo = responseColumns[34]; 
       Output0Buffer.shortdescriotion = responseColumns[35]; 
       Output0Buffer.cticategory = responseColumns[36]; 
       Output0Buffer.ctitype = responseColumns[37]; 
       Output0Buffer.ctiitem = responseColumns[38]; 
      } 
     } 
     fileReq = null; 
     fileResp = null; 
    } 
} 

이며 유용 경우, I 수신 및 웹 요청을 호출하는 데 사용하는 JSON 응답이

at ScriptMain.CreateNewOutputRows() 
    at UserComponent.PrimeOutput(Int32 Outputs, Int32[] OutputIDs, PipelineBuffer[] Buffers, OutputNameMap OutputMap) 
    at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.PrimeOutput(Int32 outputs, Int32[] outputIDs, PipelineBuffer[] buffers) 

입니다

+0

스크립트에 중단 점을 넣고 디버거의 코드를 단계별로 실행하여 잘못된 점에 대한 자세한 정보를 얻으십시오. –

+0

나는 노력했다. 출력 열을 추가 할 때 수 백 개의 행을 삽입 한 후 오류를 생성합니다. 내가 쓸모있는 것을 찾을 수 없었다. 내가 수집 할 수있는 것은 존재하지 않는 출력을 만들려고 할 때 발생하는 것이므로 출력을 여러 번 사용한 후에 이상하게 들린다. 참고로 SSIS 스크립트 구성 요소에서 시계가 작동하지 않습니다. 이것을 자신의 VS 패키지로 실행하면 잘 실행되지만 출력도 생성되지 않습니다. –

+0

그렇다면 어떤 코드 줄에서 오류가 발생합니까? 오류가 발생했을 때 색인의 값은 무엇이며, 그 때 배열의 범위는 얼마입니까? –

답변

0

CSV 라인 디 미니메이터가 \ "\ r \ n \"이고 열 중 하나의 값이 \ "\ r \ n \"인 것이 문제였습니다. 문제를 해결 한 [!,] \ "\ r \ n \"로 업데이트했습니다.

인덱스 오류는 분할로 인해 예상 한만큼 배열을 채우지 않은 결과였습니다. 의견을 보내 주셔서 고맙습니다. 미안하지만 내 실수에 불과한 질문을 게시했습니다.

관련 문제