我的代码有问题..如果我在文件为空时下载文件,我收到错误
无法转换类型为#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();
}
答案 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));
}