【问题标题】:Unable to cast object of type 'System.DBNull' to type 'System.Byte[]' when record does exist当记录确实存在时,无法将“System.DBNull”类型的对象转换为“System.Byte []”类型
【发布时间】:2015-03-13 14:57:54
【问题描述】:

我正在尝试从 MYSQL 读取和下载 BLOB。即使记录存在,但我仍然不断收到此错误。以下是我的代码:

this.Time = String.Format("{0:HH:mm:ss}", DropDownList1.SelectedValue);
            String query = "Select * from event where time='" + this.Time + "'";
            MySqlConnection conn = new MySqlConnection(connection);
            MySqlCommand cmd = new MySqlCommand(query, conn);
            String time = String.Format("{0:t}", DateTime.Today);
            conn.Open();
            MySqlDataReader r = cmd.ExecuteReader();   
            while (r.Read())
            {
                TextBox1.Text = r["name"].ToString();
                TextBox2.Text = r["Proposedby"].ToString();
                bytes = (byte[])r["proposalDoc"];    
                TextBox5.Text = Calendar1.SelectedDate.ToString("d");
                TextBox6.Text = r["time"].ToString();
                TextBox7.Text = r["Society"].ToString();
                TextBox8.Text = r["venue"].ToString();

            }

请告诉我如何消除此错误。

【问题讨论】:

  • 你确定它不为空吗?在它之前添加一个if(DBNull.Value != r["proposalDoc"])

标签: c# mysql asp.net webforms ado.net


【解决方案1】:

可能是记录存在,但错误告诉您proposalDoc 为 db null。所以灵魂将是检查它是否是这样的 db null:

if(!Convert.IsDBNull(r["proposalDoc"]))
{
    bytes = (byte[])r["proposalDoc"];
}

【讨论】:

  • 现在它在这个语句 context.Response.BinaryWrite(bytes); 中给出了 null 异常;
  • 检查为什么您的上下文对象为空,这是导致问题的原因。为此提出一个单独的问题,它与同一问题无关
【解决方案2】:

!string.IsNullOrEmpty(r["proposalDoc"].ToString())?(byte[])r["proposalDoc"] : null

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多