";IndexOutOfRangeException:索引超出了数组的界限";在SqlDb ASP.NE

本文关键字:quot 界限 ASP NE SqlDb IndexOutOfRangeException 索引 数组 | 更新日期: 2023-09-27 18:09:40

我需要上传有2列的CSV文件1.Key 2.Value和I需要将它们保存在Translation表的DB中,但我收到错误"IndexOutOfRangeException:Index超出了数组的界限。"这是我的密码。

  [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

发送,发送,对比

但我不需要英语,因为他是默认语言,因此我制作KeyName=item[0],Value=item[3]。

向致以最诚挚的问候

";IndexOutOfRangeException:索引超出了数组的界限";在SqlDb ASP.NE

        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)
            {
            }
        }

它现在工作了,问题是CSV文件有空行,所以我在While 中放入try-catch