You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#控制器导入Excel/CSV时,如何检查指定列是否存在并赋值?

解决方案:CSV导入时检查列存在性并正确赋值

首先,你的代码里有两个需要修正的地方:一是没有检查目标列是否存在,直接访问不存在的列会引发异常;二是实体对象在循环外创建,这会导致EF上下文重复添加同一个实例,最终数据可能不符合预期。

下面是修改后的完整代码,我会标注关键改动:

using (ApplicationDbContext db = new ApplicationDbContext()) 
{
    // 清空表数据
    db.Database.ExecuteSqlCommand("TRUNCATE TABLE COCoreMembers");
    
    // 读取CSV文件到DataTable
    DataAccess.DataTable abc = DataAccess.DataTable.New.ReadCsv(Server.MapPath("~/App_Data/TempBrdcepPSC/PscData/co_members.csv"));
    
    // 先检查DataTable是否包含CNIC列,避免后续循环中出错
    bool hasCnicColumn = abc.Columns.Contains("CNIC");

    foreach (Row Row in abc.Rows) 
    {
        // 重要:把实体对象的创建放到循环内部,确保每一行对应一个新实例
        COCoreMember xyz = new COCoreMember();
        
        xyz._URI = Row["_URI"];
        xyz._PARENT_AURI = Row["_PARENT_AURI"];
        xyz.HHID = Row["HHID"];
        xyz.HHNAME = Row["HHNAME"];
        xyz.HH_SET_ID = Row["HH_SET_ID"];
        xyz.HH_SET_NAME = Row["HH_SET_NAME"];
        xyz.MEM_ID = Row["MEM_ID"];
        xyz.MEM_NAME = Row["MEM_NAME"];
        xyz.MEMBER_AGE = Row["MEMBER_AGE"];
        xyz.POSITION = Row["POSITION"];
        xyz.CELL = Row["CELL"];
        
        // 检查CNIC列是否存在,再决定赋值
        if (hasCnicColumn)
        {
            // 列存在时,取对应值(注意处理空值情况)
            var cnicValue = Row["CNIC"];
            xyz.CNIC = cnicValue != null ? cnicValue.ToString() : "no record";
        }
        else
        {
            // 列不存在时,直接赋值为"No Record"
            xyz.CNIC = "No Record";
        }
        
        db.COCoreMembers.Add(xyz);
        db.SaveChanges();
    }
}

关键改动说明:

  • 列存在性检查:在循环前通过abc.Columns.Contains("CNIC")判断列是否存在,避免后续访问不存在的列引发IndexOutOfRangeException。
  • 实体对象实例化位置:将COCoreMember xyz = new COCoreMember();移到foreach循环内部,确保每一行数据对应一个全新的实体实例,避免EF上下文跟踪重复对象导致的数据异常。
  • 空值处理:即使列存在,也要处理单元格为空的情况,避免NullReferenceException。
  • 统一赋值逻辑:明确区分列存在/不存在两种场景,逻辑更清晰。

如果你的DataAccess.DataTable的Row对象访问不存在的列不会抛出异常(比如返回null),也可以在循环内直接判断Row["CNIC"]是否为null,但提前检查列存在性会更高效,也更安全。

内容的提问来源于stack exchange,提问作者Sadia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:37:37