【Bug】Data is Null. This method or property cannot be called on Null values.
先来看看其他博主的回答如下:
在使用SqlClient的DataReader的时候,如果某一个字段值为NULL并且使用reader.getString方法获取的时候会出现“Data is Null. This method or property cannot be called on Null values.”异常。初步分析导致该异常的原因应该是:
1、NULL值在DataReader中的类型是DBNULL。
2、DBNULL和字符串的空白值String.Empty不是同样的概念。
3、由于DBNULL和String.Empty不是同等值,因此SqlClient默认的实现没有对其进行强制转化而是直接抛出异常。
假装是分割线
查看错误的堆栈跟踪信息,确实报错的方法和上面讲的一样,但是数据表对应字段为null,model对应为string之前也没有出错过,于是抱着试试看的心态把string改成了string?,然后还是报错
最终根据数据表重新生成了mode解决问题,查看git对比,除了几个最大长度的设置差异外就是一些备注差异,于是我把model里一个string最大长度设置成和数据库不一样的,结果未能复现bug。
前后model修改放下面,有知道的可以在下面评论。
旧model
#region 表字段/// /// 停线开始时间/// [Display(Name = "停线开始时间")][Column("line_stop_time_start", TypeName = "datetime")][Editable(true)]public DateTime? LineStopTimeStart { get; set; }/// /// 不良数/// [Display(Name = "不良数")][DisplayFormat(DataFormatString = "18,6")][Column("rejection_number", TypeName = "decimal")][Editable(true)][Required(AllowEmptyStrings = false)]public decimal? RejectionNumber { get; set; }/// /// 批准人姓名/// [Display(Name = "批准人姓名")][MaxLength(64)][Column("ratifier_name", TypeName = "nvarchar(64)")][Editable(true)]public string RatifierName { get; set; }/// /// 记录人名字/// [Display(Name = "记录人名字")][MaxLength(32)][Column("recorder_name", TypeName = "nvarchar(32)")][Editable(true)]public string RecorderName { get; set; }/// /// 开单部门名字/// [Display(Name = "开单部门名字")][MaxLength(32)][Column("billing_dept_name", TypeName = "nvarchar(32)")][Editable(true)]public string BillingDeptName { get; set; }/// /// 异常类别 0=来料,1=制程,2=成品,3=出库 从此往后为金属元素的:10=分析检测反馈,11=设备异常反馈,12=现场异常反馈,13=实效异常反馈/// [Display(Name = "异常类别 0=来料,1=制程,2=成品,3=出库 从此往后为金属元素的:10=分析检测反馈,11=设备异常反馈,12=现场异常反馈,13=实效异常反馈 ")][Column("exception_type", TypeName = "int")][Editable(true)]public int? ExceptionType { get; set; }/// /// 品质工程师id/// [Display(Name = "品质工程师id")][Column("quality_engineer_id", TypeName = "uniqueidentifier")][Editable(true)]public Guid? QualityEngineerId { get; set; }/// /// 开单部门/// [Display(Name = "开单部门")][Column("billing_dept_id", TypeName = "uniqueidentifier")][Editable(true)]public Guid? BillingDeptId { get; set; }/// /// 发现日期/// [Display(Name = "发现日期")][Column("discover_datetime", TypeName = "datetime")][Editable(true)]public DateTime? DiscoverDatetime { get; set; }/// /// 品质工程师姓名/// [Display(Name = "品质工程师姓名")][MaxLength(510)][Column("quality_engineer_name", TypeName = "nvarchar(510)")][Editable(true)]public string QualityEngineerName { get; set; }/// /// 生产数量/// [Display(Name = "生产数量")][DisplayFormat(DataFormatString = "18,6")][Column("production_number", TypeName = "decimal")][Editable(true)][Required(AllowEmptyStrings = false)]public decimal? ProductionNumber { get; set; }/// /// 异常描述/// [Display(Name = "异常描述")][MaxLength(512)][Column("exception_description", TypeName = "nvarchar(512)")][Editable(true)]public string ExceptionDescription { get; set; }/// /// 批处理号/// [Display(Name = "批处理号")][MaxLength(32)][Column("batch_no", TypeName = "varchar(32)")][Editable(true)]public string BatchNo { get; set; }/// /// 审核人id/// [Display(Name = "审核人id")][Column("checker_id", TypeName = "uniqueidentifier")][Editable(true)]public Guid? CheckerId { get; set; }/// /// 记录人/// [Display(Name = "记录人")][Column("recorder_id", TypeName = "uniqueidentifier")][Editable(true)]public Guid? RecorderId { get; set; }/// /// 审核人姓名/// [Display(Name = "审核人姓名")][MaxLength(64)][Column("checker_name", TypeName = "nvarchar(64)")][Editable(true)]public string CheckerName { get; set; }/// /// 批准人id/// [Display(Name = "批准人id")][Column("ratifier_id", TypeName = "uniqueidentifier")][Editable(true)]public Guid? RatifierId { get; set; }/// ///状态0=草稿,1=品质部门审批中,2=工程部门审批中,3=制造部门审批中,4=销售部门审批中,5=品质副总审批中,6=执行中,7=已完结,10=开单部门审核中,11=开单部门批准中 此后为金属元素内容:30=草稿(班长判定中),32=产品负责人判定中,33=班长整改中,34=质量科确认中,35=已处理/// [Display(Name = "状态0=草稿,1=品质部门审批中,2=工程部门审批中,3=制造部门审批中,4=销售部门审批中,5=品质副总审批中,6=执行中,7=已完结,10=开单部门审核中,11=开单部门批准中 此后为金属元素内容:30=草稿(班长判定中),32=产品负责人判定中,33=班长整改中,34=质量科确认中,35=已处理")][Column("state", TypeName = "int")][Editable(true)][Required(AllowEmptyStrings = false)]public int State { get; set; }/// /// 产品名称/// [Display(Name = "产品名称")][MaxLength(64)][Column("product_name", TypeName = "nvarchar(64)")][Editable(true)][Required(AllowEmptyStrings = false)]public string ProductName { get; set; }/// /// 发生类型/// [Display(Name = "发生类型")][Column("occurrence_type", TypeName = "int")][Editable(true)]public int? OccurrenceType { get; set; }/// /// 数据来源:0=产品化,1=金属元素/// [Display(Name = "数据来源:0=产品化,1=金属元素")][Column("type", TypeName = "int")][Editable(true)]public int? Type { get; set; }/// /// 生产订单/// [Display(Name = "生产订单")][MaxLength(32)][Column("production_order", TypeName = "varchar(32)")][Editable(true)]public string ProductionOrder { get; set; }/// /// 不良率/// [Display(Name = "不良率")][MaxLength(8)][Column("rejection_rate", TypeName = "varchar(8)")][Editable(true)][Required(AllowEmptyStrings = false)]public string RejectionRate { get; set; }/// /// 存放位置/// [Display(Name = "存放位置")][MaxLength(32)][Column("storage_location", TypeName = "varchar(32)")][Editable(true)]public string StorageLocation { get; set; }/// /// 停线结束时间/// [Display(Name = "停线结束时间")][Column("line_stop_time_end", TypeName = "datetime")][Editable(true)]public DateTime? LineStopTimeEnd { get; set; }/// /// 制造时间/// [Display(Name = "制造时间")][Column("manufacture_datetime", TypeName = "datetime")][Editable(true)]public DateTime? ManufactureDatetime { get; set; }/// /// 异常单号/// [Display(Name = "异常单号")][MaxLength(32)][Column("sheet_number", TypeName = "varchar(32)")][Editable(true)]public string SheetNumber { get; set; }/// /// 完成日期/// [Display(Name = "完成日期")][Column("finish_datetime", TypeName = "datetime")][Editable(true)]public DateTime? FinishDatetime { get; set; }/// /// 是否采用反应计划 0否 1是/// [Display(Name = "是否采用反应计划 0否 1是")][Column("is_adopt_response_plan", TypeName = "int")][Editable(true)]public int? IsAdoptResponsePlan { get; set; }/// /// 反应计划/// [Display(Name = "反应计划")][MaxLength(256)][Column("adopt_response_plan", TypeName = "nvarchar(256)")][Editable(true)]public string AdoptResponsePlan { get; set; }#endregion#region 显示字段#endregion#region 关联表#endregion#region 子表/// /// 异常处理详情/// [Display(Name = "异常处理详情")]public List<BizExceptionHandlingDetail> BizExceptionHandlingDetail { get; set; }#endregion
新model
#region 表字段/// /// 停线开始时间/// [Display(Name = "停线开始时间")][Column("line_stop_time_start", TypeName = "datetime")][Editable(true)]public DateTime? LineStopTimeStart { get; set; }/// /// 不良数/// [Display(Name = "不良数")][DisplayFormat(DataFormatString = "18,6")][Column("rejection_number", TypeName = "decimal")][Editable(true)]public decimal? RejectionNumber { get; set; }/// /// 批准人姓名/// [Display(Name = "批准人姓名")][MaxLength(32)][Column("ratifier_name", TypeName = "nvarchar(32)")][Editable(true)]public string RatifierName { get; set; }/// /// 异常类别 0=来料,1=制程,2=成品,3=出库 从此往后为金属元素的:10=分析检测反馈,11=设备异常反馈,12=现场异常反馈,13=实效异常反馈/// [Display(Name = "异常类别 0=来料,1=制程,2=成品,3=出库 从此往后为金属元素的:10=分析检测反馈,11=设备异常反馈,12=现场异常反馈,13=实效异常反馈")][Column("exception_type", TypeName = "int")][Editable(true)]public int? ExceptionType { get; set; }/// /// 数据来源:0=产品化,1=金属元素/// [Display(Name = "数据来源:0=产品化,1=金属元素")][Column("type", TypeName = "int")][Editable(true)][Required(AllowEmptyStrings = false)]public int Type { get; set; }/// /// 品质工程师id/// [Display(Name = "品质工程师id")][Column("quality_engineer_id", TypeName = "uniqueidentifier")][Editable(true)]public Guid? QualityEngineerId { get; set; }/// /// 开单部门/// [Display(Name = "开单部门")][Column("billing_dept_id", TypeName = "uniqueidentifier")][Editable(true)]public Guid? BillingDeptId { get; set; }/// /// 发现日期/// [Display(Name = "发现日期")][Column("discover_datetime", TypeName = "datetime")][Editable(true)]public DateTime? DiscoverDatetime { get; set; }/// /// 品质工程师姓名/// [Display(Name = "品质工程师姓名")][MaxLength(510)][Column("quality_engineer_name", TypeName = "nvarchar(510)")][Editable(true)]public string QualityEngineerName { get; set; }/// /// 生产数量/// [Display(Name = "生产数量")][DisplayFormat(DataFormatString = "18,6")][Column("production_number", TypeName = "decimal")][Editable(true)]public decimal? ProductionNumber { get; set; }/// /// 是否采用反应计划 0否 1是/// [Display(Name = "是否采用反应计划 0否 1是")][Column("is_adopt_response_plan", TypeName = "int")][Editable(true)]public int? IsAdoptResponsePlan { get; set; }/// /// 异常描述/// [Display(Name = "异常描述")][MaxLength(512)][Column("exception_description", TypeName = "nvarchar(512)")][Editable(true)]public string ExceptionDescription { get; set; }/// /// 记录人名字/// [Display(Name = "记录人名字")][MaxLength(64)][Column("recorder_name", TypeName = "nvarchar(64)")][Editable(true)]public string RecorderName { get; set; }/// /// 批处理号/// [Display(Name = "批处理号")][MaxLength(32)][Column("batch_no", TypeName = "varchar(32)")][Editable(true)]public string BatchNo { get; set; }/// /// 审核人id/// [Display(Name = "审核人id")][Column("checker_id", TypeName = "uniqueidentifier")][Editable(true)]public Guid? CheckerId { get; set; }/// /// 记录人id/// [Display(Name = "记录人id")][Column("recorder_id", TypeName = "uniqueidentifier")][Editable(true)]public Guid? RecorderId { get; set; }/// /// 开单部门名字/// [Display(Name = "开单部门名字")][MaxLength(64)][Column("billing_dept_name", TypeName = "nvarchar(64)")][Editable(true)]public string BillingDeptName { get; set; }/// /// 反应计划/// [Display(Name = "反应计划")][MaxLength(512)][Column("adopt_response_plan", TypeName = "nvarchar(512)")][Editable(true)]public string AdoptResponsePlan { get; set; }/// /// 审核人姓名/// [Display(Name = "审核人姓名")][MaxLength(64)][Column("checker_name", TypeName = "nvarchar(64)")][Editable(true)]public string CheckerName { get; set; }/// /// 批准人id/// [Display(Name = "批准人id")][Column("ratifier_id", TypeName = "uniqueidentifier")][Editable(true)]public Guid? RatifierId { get; set; }/// /// 状态0=草稿,1=品质部门审批中,2=工程部门审批中,3=制造部门审批中,4=销售部门审批中,5=品质副总审批中,6=执行中,7=已完结,10=开单部门审核中,11=开单部门批准中 此后为金属元素内/// [Display(Name = "状态0=草稿,1=品质部门审批中,2=工程部门审批中,3=制造部门审批中,4=销售部门审批中,5=品质副总审批中,6=执行中,7=已完结,10=开单部门审核中,11=开单部门批准中 此后为金属元素内")][Column("state", TypeName = "int")][Editable(true)][Required(AllowEmptyStrings = false)]public int State { get; set; }/// /// 产品名称/// [Display(Name = "产品名称")][MaxLength(64)][Column("product_name", TypeName = "nvarchar(64)")][Editable(true)]public string ProductName { get; set; }/// /// 发生类型(0=首次,1=重复)/// [Display(Name = "发生类型(0=首次,1=重复)")][Column("occurrence_type", TypeName = "int")][Editable(true)]public int? OccurrenceType { get; set; }/// /// 生产订单/// [Display(Name = "生产订单")][MaxLength(32)][Column("production_order", TypeName = "varchar(32)")][Editable(true)]public string ProductionOrder { get; set; }/// /// 不良率/// [Display(Name = "不良率")][MaxLength(8)][Column("rejection_rate", TypeName = "varchar(8)")][Editable(true)]public string RejectionRate { get; set; }/// /// 存放位置/// [Display(Name = "存放位置")][MaxLength(32)][Column("storage_location", TypeName = "varchar(32)")][Editable(true)]public string StorageLocation { get; set; }/// /// 完成日期/// [Display(Name = "完成日期")][Column("finish_datetime", TypeName = "datetime")][Editable(true)]public DateTime? FinishDatetime { get; set; }/// /// 停线结束时间/// [Display(Name = "停线结束时间")][Column("line_stop_time_end", TypeName = "datetime")][Editable(true)]public DateTime? LineStopTimeEnd { get; set; }/// /// 制造时间/// [Display(Name = "制造时间")][Column("manufacture_datetime", TypeName = "datetime")][Editable(true)]public DateTime? ManufactureDatetime { get; set; }/// /// 异常单号/// [Display(Name = "异常单号")][MaxLength(32)][Column("sheet_number", TypeName = "varchar(32)")][Editable(true)]public string SheetNumber { get; set; }#endregion#region 显示字段#endregion#region 关联表#endregion#region 子表/// /// 异常处理详情/// [Display(Name = "异常处理详情")]public List<BizExceptionHandlingDetail> BizExceptionHandlingDetail { get; set; }#endregion
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
