SSIS(Visual Studio 2015)スクリプトコンポーネント(C#2015)を使用してWebリクエストを行っています。レスポンスは、ダウンロードするCSVファイルへのリンクを提供します。私はリンクを使用して、OLEDBの宛先のSQLデータベースに書き込む出力にCSVファイルをストリーミングします。 CSVファイルは1000行に分割されています。(SSIS)スクリプトコンポーネント "インデックスが配列境界外です"
このスクリプトは、データフローごとに1回ずつ、各テーブルごとに1つ、合計12のデータフローで実行します。問題のないものもありますが、一部のCSVを読み込んだ後にこの問題が発生するものもあります。
エラーが
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)
スクリプトコードが
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;
}
}
であり、それは便利であれば、私が受信したWebリクエストを呼び出すために使用してJSONレスポンスは次のとおりです。
{"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"]}
スクリプトにブレークポイントを置き、デバッガのコードをステップ実行して、何がうまくいかないのかについての詳細情報を取得します。 –
私は試しました。出力列を追加するときに数百行を挿入した後にエラーが生成されます。私はそれから有用な何かを見つけることができませんでした。私が集めることから、これは存在しない出力を作成しようとしたときに発生します。そのため、出力を複数回使用した後でこれを行うのが奇妙です。 サイドウォッチはSSISスクリプトコンポーネントでは動作しません。これを独自のVSパッケージとして実行すると正常に動作しますが、出力も生成されません。 –
それでは、どのコード行がエラーになりますか?エラーが発生した時点のインデックスの値は何ですか、そのときの配列の範囲は何ですか? –