ASP.NET Store上传的文件sql server表

时间:2009-04-17 21:15:58

标签: c# asp.net sql-server sql-server-2005 varbinary

如何将ASP.net webform上传的文件存储到sql server 2005 varbinary(max)字段中?

这是我到目前为止所做的:

protected void btnUpload_Click(object sender, EventArgs e)
{
    for (int i = 0; i < Request.Files.Count; i++)
    {
        StoreFile(Request.Files[i]);
    }
}

private void StoreFile(HttpPostedFile file)
{
    // what do i do now?
}

一个普通的旧ado.net示例会很好。一个linq to sql例子也是如此。

由于

4 个答案:

答案 0 :(得分:3)

有关如何将文件直接上传到数据库的精彩教程 在4GuysFromRolla

答案 1 :(得分:2)

以下是我使用Linq To Sql执行此操作的方法:

FilesDataContext db = new FilesDataContext();

protected void btnUpload_Click(object sender, EventArgs e)
{
    for (int i = 0; i < Request.Files.Count; i++)
    {
        StoreFile(Request.Files[i]);
    }

    db.SubmitChanges();
}

private void StoreFile(HttpPostedFile file)
{
    byte[] data = new byte[file.ContentLength];
    file.InputStream.Read(data, 0, file.ContentLength);

    File f = new File();
    f.Data = data;
    f.Filename = file.FileName;
    db.Files.InsertOnSubmit(f);
}

答案 2 :(得分:1)

这通常被视为不良形式。它使您的数据库膨胀,并没有真正提供任何优势,而不是将所有文件保存在硬盘驱动器文件夹中,只是将文件的位置存储在数据库中。你确定要这么做吗?

答案 3 :(得分:0)

这是罗尼回答的快速重构:

Public Shared Sub SaveUploadedFile(File As HttpPostedFile)
  Dim oFile As Db.File

  oFile = New Db.File
  oFile.Data = File.ToBytes
End Sub

<Extension()>
Public Function ToBytes(File As HttpPostedFile) As Byte()
  ToBytes = New Byte(File.ContentLength - 1) {}

  Using oStream As Stream = File.InputStream
    oStream.Read(ToBytes, 0, File.ContentLength)
  End Using
End Function

HTH