下载文件错误异常c#

本文关键字:异常 错误 文件 下载 | 更新日期: 2023-09-27 18:24:41

我的代码有问题。。如果我在文件为空时下载文件,我会得到一个错误

无法将"System.DBNull"类型的对象强制转换为"System.Byte[]"类型

我的代码C#是:

protected void DownloadFile(object sender, EventArgs e)
{ 
    int id = int.Parse((sender as LinkButton).CommandArgument);
    byte[] bytes;
    string fileName, contentType;
    //   string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection("Data Source=OUSSAMA-PC;Initial Catalog=evamedica;Integrated Security=True"))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandText = "select id,soins,date_sejour,civilite,nom,prenom,date_naissance,email,gsm,adresse,code_postal,ville,pays,accompagnant,nbr_accompagnant,commentaire,connu_evamedica,Name,ContentType,Data from devis where id=@id";
            cmd.Parameters.AddWithValue("@id", id);
            cmd.Connection = con;
            con.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                sdr.Read();
                bytes = (byte[])sdr["Data"];
                contentType = sdr["ContentType"].ToString();
                fileName = sdr["Name"].ToString();
            }
            con.Close();
        }
    }
    Response.Clear();
    Response.Buffer = true;
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = contentType;
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
    Response.BinaryWrite(bytes);
    Response.Flush();
    Response.End();
}

下载文件错误异常c#

异常已经解释了问题所在。由于数据库中的数据列为NULL(DbNull),因此不能将其强制转换为字节[]。

您必须检查sdr["Data"]!=DBNull,然后再尝试强制转换它。这样你就可以避免这个例外。

if(sdr["Data"] != DBNull.Value)
   bytes = (byte[])sdr["Data"];

如果您不想这样做,可以使用try-catch块捕获异常,并在Data为NULL时执行必须执行的操作。

干杯Michael

更改

bytes = (byte[])sdr["Data"];

类似于:

const String DATA = "Data";
if (sdr.IsDBNull(sdr.GetOrdinal(DATA)))
{
   bytes = (byte[])sdr[DATA];
}
else
{
   //handle null
}

异常为"未分配的局部变量'bytes'`Response.BinaryWrite(字节);但是我发现了一个结果。。问题是下载按钮会下载页面。。如果值为空,我不知道是否可以禁用链接按钮

                   try
                    {

字节=(byte[])sdr["数据"];

                    }
                    catch (Exception ex )
                    {
                        ex.Equals(bytes = System.Text.Encoding.UTF8.GetBytes(String.Empty));
                    }