2016-09-29 3 views
0

2 열이있는 CSV 파일을 업로드해야합니다. 1.Key 2.Value 및 변환 테이블의 DB에 저장해야하지만 오류가 발생합니다. "IndexOutOfRangeException : 인덱스 배열의 범위를 벗어난 것입니다." 내 코드는 다음과 같습니다. 여기 "IndexOutOfRangeException : 인덱스가 배열 경계를 벗어났습니다." SqlDb ASP.NET 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 쓰레기 인 반면에 시도 - 캐치를 넣어 있도록 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 '문을 작성하는 대신 빈 행을 확인하십시오. –

관련 문제