2016-09-29 5 views
0

2つの列を持つCSVファイルをアップロードする必要があります。1.Key 2.Valueと私は変換テーブルのDBに保存する必要がありますが、エラーは "IndexOutOfRangeException : インデックスが配列の範囲外だった。" ここに私のコードです。ここで "IndexOutOfRangeException:インデックスが配列の境界外にありました。" SqlDbで行ごとにCSVファイルを保存するASP.NET 5 MVC 6

[HttpPost("application/UploadCSV/{id}")] 
    public async Task<ActionResult> UploadCSV(UploadCSVModelView uploadFileMV, int Id) 
    {  
     var csvReader = new StreamReader(uploadFileMV.UploadedFile.OpenReadStream()); 

     var values = new List<string>(); 
     var appId = _applicationlanguageService.GetAll().Where(x => x.ApplicationId == Id).Select(x => x.Id).FirstOrDefault(); 
     List<Translation> listTrans = new List<Translation>(); 

     while (!csvReader.EndOfStream) 
     { 
      string abc = csvReader.ReadLine(); 
      var item = abc.Split(','); 
      listTrans.Add(new Translation(){ KeyName= item[0], Value = item[3], State = (int)EnumState.Created, ApplicationLanguageId = appId, CreatedBy = User.Identity.Name, CreatedOn = DateTime.UtcNow}); 

     } 
     if (ModelState.IsValid) 
     { 
      await _translationService.CreateAsync(listTrans); 
     } 


     return RedirectToAction("Index"); 
    } 

は私の翻訳モデル

public class Translation : BaseEntity 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public string KeyName { get; set; } 
    public string Value { get; set; } 
    public int State { get; set; } 

    [ForeignKey("ApplicationLanguageId")] 
    public int ApplicationLanguageId { get; set; } 
    public virtual ApplicationLanguage ApplicationLanguage { get; set; } 
} 

図である

<div class="row"> 
    <div class="col-md-8"> 
     <section> 
      <form asp-controller="Application" asp-action="UploadCSV" data-method="post" class="form-horizontal" enctype="multipart/form-data" onsubmit="return beforeSubmit();"> 
       <div asp-validation-summary="ValidationSummary.All" class="text-danger"></div> 
      <div class="form-group"> 
       <label asp-for="Version" class="col-md-2 control-label"></label> 
       <div class="col-md-10"> 
        <input asp-for="Version" class="form-control" required /> 
        <span asp-validation-for="Version" class="text-danger"></span> 
       </div> 
      </div> 

      <div class="form-group"> 
        <label class="col-md-2 control-label">Media Type</label> 
        <div class="col-md-10"> 
         <select asp-for="LanguageId" asp-items="Model.LanguagesList" class="form-control"></select> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label class="col-md-2 control-label">File</label> 
        <div class="col-md-10"> 
         <input asp-for="UploadedFile" id="fileMedia" type="file" max-size=1048576> 
         <span id="val-fileMedia" class="text-danger field-validation-valid" style="display:block;color: #C23434;"></span> 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <button type="submit" class="btn btn-default">Create</button> 
        </div> 
       </div> 
      </form> 
     </section> 
     <div> 
      <a asp-controller="Application" asp-action="Index">Back to list</a> 
     </div> 
    </div> 
</div> 

キー、英語、オランダ

保存、保存,, Bewaar

送信、送信,, Verstuur

が、彼はデフォルトの言語であり、キー名=項目作ることイムのbecaouseので、私は英語を必要といけない[0]、[値=項目[3]。

よろしく

+0

あなたのCSVがゴミである一方でのtry-catchを置くように、CSVファイルには、空の行を持っているということでした。 3つの列が定義されていますが、データには4つの列があります。また、それはCSVファイルの処理方法でもありません。単に「、」を分割することはできません。フォーマットの作成方法については、CSV RFC https://tools.ietf.org/html/rfc4180を参照してください。 – Tseng

答えて

0
 while (!csvReader.EndOfStream) 
     { 
      try 
      { 
       string abc = csvReader.ReadLine(); 
       var item = abc.Split(','); 
       if (item != null) 
       { 
        listTrans.Add(new Translation() 
        { 
         KeyName = item[0], 
         Value = item[3], 
         State = (int)EnumState.Created, 
         ApplicationLanguageId = appId, 
         CreatedBy = User.Identity.Name, 
         CreatedOn = DateTime.UtcNow 
        }); 
       } 
      } 
      catch (Exception ex) 
      { 

      } 
     } 

それが機能するようになりましたし、問題は、私は

+0

空の 'catch'文を作成する代わりに、空の行を確認してください。 –

関連する問題