2012-11-12 3 views
0

для извлечения файла из базы данных Я использовал ниже запрос linq для загрузки efile, но у меня проблема с недопустимыми аргументами в функции загрузки (Efile). Я видел, где использовать datatable для скачивания. Мне нравится делать это без использования данных, но я не знаю, как это сделать?неверные аргументы

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

Метод принимает аргумент объекта «tblFile», и вы передаете коллекцию. Добавьте Single() в выражение выражения linq и получите разрешение.

var Efile = (from ef in _DataContext.tblFiles 
       where ef.FileId == _FileId 
       select ef).Single(); 

В качестве альтернативы, вы можете использовать First(), FirstOrDefault() или SingleOrDefault(), а также.

+0

спасибо, что ошибка удалена, но, похоже, функция загрузки не работает и загрузка не происходит – masoud

0

Убедитесь, что ваш .dbml-файл имеет свойство вашей таблицы tblfile правильно, как вы хотите, и как вы описали здесь. и использовать ниже код для повторной обработки данных из базы данных.

tblFile data = _DataContext.tblFile.SingleOrDefault(s=>s.fileid == _FileId); 

Это будет работать так, как вы хотите.

Смежные вопросы