从数据库中检索文件我使用下面的linq查询来下载efile,但我在函数下载(Efile)中有问题无效参数。 我见过一些使用数据表下载的地方。我喜欢这样做而不使用数据表,但我不知道如何?
the fields of table tblfile is like below.
fileid(int), FileName (varchar(50)), ContentType (varchar(50)), Data varbinary(MAX)
请帮助解决问题。
protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
if (e.CommandName == "Download")
{
_DataContext = new EDMSDataContext();
//you can get your command argument values as follows
string FileId = e.CommandArgument.ToString();
int _FileId = Convert.ToInt32(FileId);
var Efile = from ef in _DataContext.tblFiles
where ef.FileId == _FileId
select ef;
if (Efile != null)
{
download(Efile);
}
}
}
private void download ( tblFile Efile)
{
Byte[] bytes = (Byte[])Efile.Data.ToArray();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = Efile.ContentType.ToString();
Response.AddHeader("content-disposition", "attachment;filename="
+ Efile.FileName.ToString());
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
答案 0 :(得分:0)
该方法接受“tblFile”对象的参数,并且您正在传递该集合。将Single()添加到linq查询表达式,然后解析。
var Efile = (from ef in _DataContext.tblFiles
where ef.FileId == _FileId
select ef).Single();
或者,您也可以使用First()
,FirstOrDefault()
或SingleOrDefault()
。
答案 1 :(得分:0)
确保您的.dbml文件具有表格 tblfile 的属性,如您所愿并且如您所述。并使用下面的代码重试数据库中的数据。
tblFile data = _DataContext.tblFile.SingleOrDefault(s=>s.fileid == _FileId);
这将按您的意愿工作。