下载文件错误异常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();
}
异常已经解释了问题所在。由于数据库中的数据列为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));
}