2011-10-12 177 views
0

我试图在SQL Server数据库中存储文件,并且在C#中使用ASP.NET MVC 3和LINQ to SQL。当我尝试将列的数据类型设置为byte []时,它表示这是无效的数据类型。使用vrabinary(MAX)数据类型似乎是合乎逻辑的事情。LINQ不提供用于存储文件的byte []数据类型

目标是将PDF文件存储在用户选择使用HTTP文件上传器上传的数据库中。在指定要存储文件的列的LINQ成员变量的赋值期间发生该错误。

错误3无法隐式转换类型 'System.Web.HttpPostedFileBase' 到 'System.Data.Linq.Binary' C:\用户\亚伦彭定康\文档\ Visual Studio 2010的\项目\ MyApp的\ MyApp的\控制器\ MyController.cs 66 31 MyApp

我还没找到太多遇到这个问题的其他人的方式,所以我认为必须有一些我遗失的东西,对于任何人来说都是过于基本的。

我的控制器:

public ActionResult UploadPDF() 
    { 
     List<ViewDataUploadFilesResult> r = new List<ViewDataUploadFilesResult>(); 

     HttpPostedFileBase hpf;// = Request.Files[file] as HttpPostedFileBase; 

     foreach (string file in Request.Files) 
     { 
      hpf = Request.Files[file] as HttpPostedFileBase; 
      if (hpf.ContentLength == 0) 
       continue; 
      string savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "images\\" + Path.GetFileName(hpf.FileName)); 
      hpf.SaveAs(savedFileName); 

      r.Add(new ViewDataUploadFilesResult() 
      { 
       Name = savedFileName, 
       Length = hpf.ContentLength 
      }); 
     } 

     MyApp.Models.MyAppDataContext db = new MyApp.Models.MyAppDataContext(); 

     MyApp.Models.PDFFile myPDFFile = new MyApp.Models.PDFFile(); 

     myPDFFile.Content = hpf; 
     db.questions.InsertOnSubmit(myPDFFile); 
     db.SubmitChanges(); 

     return View("UploadPDF", r); 
    } 

什么的去了解这一切的正确方法?

P.S .:如何将PDF作为嵌入对象显示而不保存到服务器?

D.A.P.

回答

6

错误消息告诉你什么是错的...你要设置的内容= HPF。 hpf是一个HttpPostedFileBase,因此它首先需要转换为一个byte []。通过从hpf流中读取字节[]来实现这一点。

myPDFFile.Content = new BinaryReader(hpf.InputStream).ReadBytes(hpf.InputStream.Length)

0

在您的LINQ to SQL实体设计器中,将字段从System.Data.Linq.Binary更改为System.Byte[]。提交后隐含转换。

enter image description here

+0

设计师没有该选项。 –

相关问题