下载文件错误异常c#

时间:2014-09-26 10:43:49

标签: c# download

我的代码有问题..如果我在文件为空时下载文件,我收到错误

  

无法转换类型为#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();
}

3 个答案:

答案 0 :(得分:0)

异常已经解释了问题所在。 由于数据库中的数据列为NULL(DbNull),因此无法将其转换为byte []。

在尝试强制转换之前,你必须先检查sdr [“Data”]!= DBNull。 这样就可以避免这种异常。

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

如果您不希望使用try-catch块捕获异常,并在Data为NULL时执行必须执行的操作。

干杯 迈克尔

答案 1 :(得分:0)

更改

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

类似于:

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

答案 2 :(得分:0)

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

                   try
                    {

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

                    }
                    catch (Exception ex )
                    {

                        ex.Equals(bytes = System.Text.Encoding.UTF8.GetBytes(String.Empty));

                    }