【问题标题】:ExecuteReader return null value for one of the column but data exist in the database [duplicate]ExecuteReader为其中一列返回空值,但数据库中存在数据[重复]
【发布时间】:2020-03-09 05:32:30
【问题描述】:

ExecuteReader 正在为代码查询中的列 MESSAGE 返回空值,但其他列正在返回正确的值。数据存在于数据库中,如下图所示请谁能告诉我哪里出错了

Oracle 数据库返回

Oracle 创建表

 CREATE TABLE "CHT"."HEALTH_RECORD_MESSAGES" 
 (  
   "RECORD" NUMBER NOT NULL ENABLE, 
   "MESSAGE" LONG, 
   "CREATED" DATE, 
    "CREATED_TIME" VARCHAR2(5 BYTE), 
    "WHO_ENTERED" VARCHAR2(15 BYTE), 
    "EXPIRES" DATE

)

类模型

public class HealthRecordMessage
{
    public int RECORD { get; set; }
    public string MESSAGE { get; set; }
    public DateTime CREATED { get; set; }
    public DateTime CREATED_TIME { get; set; }
    public string WHO_ENTERED { get; set; }
}

C#代码

    public ActionResult SearchHealthRecordMessage(int? id)
    {
        List<HealthRecordMessage> HealthRecordMessage = new List<HealthRecordMessage>();
        using (OracleConnection conn = new OracleConnection(WebConfigurationManager.ConnectionStrings["HealthRecord"].ConnectionString))
        {
            conn.Open();
            OracleCommand cmd = new OracleCommand();
            cmd.Connection = conn;
            cmd.CommandText = @"SELECT RECORD,MESSAGE,WHO_ENTERED,CREATED,CREATED_TIME
                                        FROM
                                            HEALTH_RECORD_MESSAGES

                                            Where  RECORD=:RecordId";
            cmd.CommandType = CommandType.Text;                
            cmd.Parameters.Add("RecordId", id);
            OracleDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {                   
                var healthrecordMessage = new HealthRecordMessage();
                healthrecordMessage.RECORD =Convert.ToInt32(rdr["RECORD"]);
                healthrecordMessage.MESSAGE =rdr["MESSAGE"].ToString();// this is My problem  Message Value is null
                healthrecordMessage.WHO_ENTERED = rdr["WHO_ENTERED"].ToString();
                healthrecordMessage.CREATED = Convert.ToDateTime(rdr["CREATED"]);
                healthrecordMessage.CREATED_TIME = Convert.ToDateTime(rdr["CREATED_TIME"]);
                HealthRecordMessage.Add(healthrecordMessage);
            }
            //return View(patientList);
        }

        return Json(new { data = HealthRecordMessage }, JsonRequestBehavior.AllowGet);
    }

【问题讨论】:

  • 在带有Add的代码行上放置一个断点。运行到断点,然后转到Immediate Window 并输入?healthrecordMessage.MESSAGE.Length 请分享结果。
  • 数据库中字段的编码是什么?
  • @mjwills 从请求“healthrecordMessage.MESSAGE.Length”返回引发了“System.NullReferenceException”类型的异常数据:{System.Collections.ListDictionaryInternal} HResult:-2147467261 HelpLink:null InnerException:null 消息: “你调用的对象是空的。”来源:“cd938a7e322d4459bb721016f0afcd9f”StackTrace:“在 x.m0(HealthRecordController 4__this, Nullable1 id)" TargetSite: {Int32 &lt;&gt;m0(NSCHT.HealthRecord.Controllers.HealthRecordController, System.Nullable1[System.Int32])}

标签: c# sql oracle


【解决方案1】:

在@mjwills 的帮助下需要添加

cmd.InitialLONGFetchSize = -1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2018-06-24
    • 2017-04-03
    • 1970-01-01
    • 2020-10-10
    • 2022-01-18
    相关资源
    最近更新 更多