2016-07-24 11 views
0

Ich verwende eine SSIS (Visual Studio 2015) Skript-Komponente (C# 2015), um eine Web-Anfrage zu machen. Die Antwort enthält Links zu herunterzuladenden CSV-Dateien. Ich verwende die Links, um die CSV-Dateien zu Ausgaben zu streamen, die ich in eine SQL-Datenbank in einem OLEDB-Ziel schreibe. Die CSV-Dateien sind in 1000 Zeilen unterteilt.(SSIS) Skript Komponente "Index war außerhalb der Grenzen des Arrays"

Ich führe dieses Skript einmal für jeden Datenfluss, einen Datenfluss für jede Tabelle, insgesamt 12 Datenflüsse. Einige funktionieren ohne Probleme, einige sehen jedoch dieses Problem nach dem Laden einiger CSVs.

Der Fehler ist

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) 

Der Script-Code

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; 
    } 
} 

ist Und wenn es sinnvoll ist, ist die JSON-Antwort, die ich erhalten und verwenden Sie die Web-Anfragen zu nennen:

{"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"]} 
+0

Setzen Sie einen Unterbrechungspunkt in das Skript und durchlaufen Sie den Code im Debugger, um mehr Informationen darüber zu erhalten, was falsch läuft. –

+0

Ich habe es versucht. Es generiert den Fehler nach dem Einfügen einiger hundert Zeilen beim Hinzufügen einer Ausgabespalte. Ich konnte nichts Nützliches daraus finden. Wenn ich versuche, eine Ausgabe zu erstellen, die nicht existiert, passiert das merkwürdig, dass dies nach mehrmaliger Verwendung der Ausgabe geschieht. Nebenbei bemerkt funktionieren Uhren in SSIS-Skriptkomponenten nicht. Wenn ich dies als ein eigenes VS-Paket ausführe, läuft es gut, aber es erzeugt auch nicht die Ausgaben. –

+0

Ok, in welcher Codezeile tritt der Fehler auf? Was ist der Wert des Index zum Zeitpunkt des Fehlers und was ist der Bereich des Arrays zu der Zeit? –

Antwort

0

Es stellte sich heraus, dass der CSV-Zeilenbegrenzer \ "\ r \ n \" war und eine der Spalten einen Wert von \ "\ r \ n \" hatte. Ich habe es auf [!,] \ "\ R \ n \" aktualisiert, wodurch das Problem behoben wurde.

Der Indexfehler war ein Ergebnis der Aufteilung, die das Array nicht so viel auffüllte, wie ich erwartet hatte. Danke, dass du es dir angesehen hast. Es tut mir leid, dass du eine Frage gestellt hast, die wirklich nur ein Fehler von mir war.

Verwandte Themen