c# - ToList() 中的“InvalidCastException 指定的强制转换无效”
问题描述
我在一个 MVC 4 C# 应用程序中,在其中我显示了一个 oracle 表的记录,但是当我执行它时抛出了这个异常,我从来没有遇到过这个问题。
这是我的代码:
public ActionResult Index()
{
Entities db = new Entities();
IList<MVC_PCMonitoring_Dash.TB_OP_PC_MONITORING_V4> PCList = new List<MVC_PCMonitoring_Dash.TB_OP_PC_MONITORING_V4>();
var query = from qrs in db.TB_OP_PC_MONITORING_V4 select qrs;
var listdata = query.ToList(); // <-- This is where the exception occurs "Specified cast is not valid":
foreach (var pcdata in listdata)
{
PCList.Add(new TB_OP_PC_MONITORING_V4()
{
IDPC = pcdata.IDPC,
LINE_CODE = pcdata.LINE_CODE,
PROCESS_NAME = pcdata.PROCESS_NAME,
PING_STATUS = pcdata.PING_STATUS,
SFC_STATUS = pcdata.SFC_STATUS,
FL_STATUS = pcdata.FL_STATUS,
RAS_STATUS = pcdata.RAS_STATUS,
PC_UTC = pcdata.PC_UTC,
PC_PROCESSOR_STATUS = pcdata.PC_PROCESSOR_STATUS,
PC_RAM_STATUS = pcdata.PC_RAM_STATUS,
PC_VERSION = pcdata.PC_VERSION,
IPADDRESS = pcdata.IPADDRESS,
});
}
return View(PCList);
}
你能告诉我是什么导致了错误或我做错了什么吗?提前致谢
编辑:
添加 Oracle 表语法
-- Create table
create table TB_OP_PC_MONITORING_V4
(
idpc NUMBER not null,
ipaddress VARCHAR2(20) not null,
pc_name VARCHAR2(30) not null,
pc_mac VARCHAR2(20),
pc_model VARCHAR2(30),
pc_sn VARCHAR2(30),
pc_mfg VARCHAR2(30),
pc_processor VARCHAR2(70),
pc_speed VARCHAR2(15),
pc_ram VARCHAR2(8),
pc_core VARCHAR2(2),
pc_username VARCHAR2(50),
pc_version VARCHAR2(50),
pc_servicepack VARCHAR2(8),
pc_arch VARCHAR2(8),
pc_serialkey VARCHAR2(30),
pc_reg_user VARCHAR2(100),
pc_install_date VARCHAR2(18),
line_code VARCHAR2(20),
process_name VARCHAR2(60),
order_rate NUMBER,
machine_type VARCHAR2(10),
create_date DATE,
sfc_status VARCHAR2(2),
update_sfc DATE,
sys_update_sfc DATE,
time_out_sfc NUMBER,
fl_status VARCHAR2(2),
update_fl DATE,
sys_update_fl DATE,
time_out_fl NUMBER,
ping_status VARCHAR2(2),
update_ping DATE,
sys_update_ping DATE,
time_out_ping NUMBER,
raws VARCHAR2(2),
pc_processor_status VARCHAR2(3),
pc_ram_status VARCHAR2(3),
pc_utc VARCHAR2(15),
ras_status VARCHAR2(2),
update_ras DATE,
sys_update_ras DATE,
time_out_ras NUMBER
)
tablespace TS_DATA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 1M
minextents 1
maxextents unlimited
);
编辑2:
EntityFramework Table TB_OP_PC_MONITORING_V4在我创建Model.edmx 时生成
namespace MVC_PCMonitoring_Dash
{
using System;
using System.Collections.Generic;
public partial class TB_OP_PC_MONITORING_V4
{
public decimal IDPC { get; set; }
public string IPADDRESS { get; set; }
public string PC_NAME { get; set; }
public string PC_MAC { get; set; }
public string PC_MODEL { get; set; }
public string PC_SN { get; set; }
public string PC_MFG { get; set; }
public string PC_PROCESSOR { get; set; }
public string PC_SPEED { get; set; }
public string PC_RAM { get; set; }
public string PC_CORE { get; set; }
public string PC_USERNAME { get; set; }
public string PC_VERSION { get; set; }
public string PC_SERVICEPACK { get; set; }
public string PC_ARCH { get; set; }
public string PC_SERIALKEY { get; set; }
public string PC_REG_USER { get; set; }
public string PC_INSTALL_DATE { get; set; }
public string LINE_CODE { get; set; }
public string PROCESS_NAME { get; set; }
public Nullable<decimal> ORDER_RATE { get; set; }
public string MACHINE_TYPE { get; set; }
public Nullable<System.DateTime> CREATE_DATE { get; set; }
public string SFC_STATUS { get; set; }
public Nullable<System.DateTime> UPDATE_SFC { get; set; }
public Nullable<System.DateTime> SYS_UPDATE_SFC { get; set; }
public Nullable<decimal> TIME_OUT_SFC { get; set; }
public string FL_STATUS { get; set; }
public Nullable<System.DateTime> UPDATE_FL { get; set; }
public Nullable<System.DateTime> SYS_UPDATE_FL { get; set; }
public Nullable<decimal> TIME_OUT_FL { get; set; }
public string PING_STATUS { get; set; }
public Nullable<System.DateTime> UPDATE_PING { get; set; }
public Nullable<System.DateTime> SYS_UPDATE_PING { get; set; }
public Nullable<decimal> TIME_OUT_PING { get; set; }
public string RAWS { get; set; }
public string PC_PROCESSOR_STATUS { get; set; }
public string PC_RAM_STATUS { get; set; }
public string PC_UTC { get; set; }
public string RAS_STATUS { get; set; }
public Nullable<System.DateTime> UPDATE_RAS { get; set; }
public Nullable<System.DateTime> SYS_UPDATE_RAS { get; set; }
public Nullable<decimal> TIME_OUT_RAS { get; set; }
}
}
模型1.上下文
namespace MVC_PCMonitoring_Dash
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class Entities : DbContext
{
public Entities()
: base("name=Entities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<TB_TEST> TB_TEST { get; set; }
public DbSet<TB_OP_PC_MONITORING_V4> TB_OP_PC_MONITORING_V4 { get; set; }
}
}
编辑3:
根据结果更新字段的 Oracle 过程
create or replace procedure SP_DASHBOARD_PINGSTATUS is
begin
declare
BEGIN
Update rsmes.tb_op_pc_monitoring_v4 t
set t.sys_update_ping = sysdate,
t.sys_update_sfc = sysdate,
t.sys_update_fl = sysdate,
t.sys_update_ras = sysdate,
t.pc_utc = (select 'UTC' || substr(current_timestamp, '30','6')timezonenumber from dual);
for c in (select ipaddress,((SYS_UPDATE_PING - UPDATE_PING)*60*60*24) as PING_RESULT from TB_OP_PC_MONITORING_V4)
loop
Update rsmes.tb_op_pc_monitoring_v4 tg
set tg.ping_status =
case
when (SYSDATE - tg.update_ping) * 60 * 60 * 24 <= 5 then 'OK'
else 'NG'
end,
tg.time_out_ping = (SYSDATE - tg.update_ping) * 60 * 60 * 24;
end loop;
for d in (select ipaddress,((SYS_UPDATE_SFC - UPDATE_SFC)*60*60*24) as SFC_RESULT from TB_OP_PC_MONITORING_V4)
loop
Update rsmes.tb_op_pc_monitoring_v4 tg2
set tg2.sfc_status =
case
when (SYSDATE - tg2.update_sfc) * 60 * 60 * 24 <= 5 then 'OK'
else 'NG'
end,
tg2.time_out_sfc = (SYSDATE - tg2.update_sfc) * 60 * 60 * 24;
end loop;
for e in (select ipaddress,((SYS_UPDATE_FL - UPDATE_FL)*60*60*24) as FL_RESULT from TB_OP_PC_MONITORING_V4)
loop
Update rsmes.tb_op_pc_monitoring_v4 tg3
set tg3.fl_status =
case
when (SYSDATE - tg3.update_fl) * 60 * 60 * 24 <= 5 then 'OK'
else 'NG'
end,
tg3.time_out_fl = (SYSDATE - tg3.update_fl) * 60 * 60 * 24;
end loop;
for f in (select ipaddress,((SYS_UPDATE_RAS - UPDATE_RAS)*60*60*24) as RAS_RESULT from TB_OP_PC_MONITORING_V4)
loop
Update rsmes.tb_op_pc_monitoring_v4 tg3
set tg3.ras_status =
case
when (SYSDATE - tg3.update_ras) * 60 * 60 * 24 <= 5 then 'OK'
else 'NG'
end,
tg3.time_out_ras = (SYSDATE - tg3.update_ras) * 60 * 60 * 24;
end loop;
commit;
END;
end SP_DASHBOARD_PINGSTATUS;
解决方案
推荐阅读
- ajax - 为什么 Ajax 在 laravel 上得到 500 内部错误
- batch-file - 如何循环浏览 Windows 服务并将它们与文本文件进行批量比较
- java - 有没有办法让我在java中的单一方法中加密和解密给定密钥的消息?
- javascript - 如何链接 JavaScript 文件以使用其他文件中的数组
- swiftui - SwiftUI 如何检测视图何时具有焦点?
- linux - 使用 Locust 对同时从 CSV 加载的多个 URL 运行负载测试
- arrays - 二分查找排序,超时
- node.js - AWS Lambda 节点JS 12
- r - 如何解决负二项式拟合(glm.nb)错误?
- python - 当 unittest.patch 只接受一个时,如何将两个位置参数传递给它?