如何在SQL Server 2008中存储和检索.pdf,.exe文件

时间:2012-09-20 10:08:26

标签: c# sql-server database visual-studio-2010

我目前正在开发Windows窗体应用程序(C#,VS 2010),我需要创建一些功能,使用户能够将.pdf.exe文件上传到SQL Server 2008数据库并下载它们背部。

我遇到的问题是从数据库下载的文件总是被破坏(.txt文件除外),即使它们的大小相同。我使用varbinary(MAX)作为文件类型来将数据存储在数据库中。

有人能告诉我一些如何执行此操作的示例代码吗?

PS:我已研究了一个多星期,但仍无法找到解决问题的方法,有人可以帮忙吗?任何答案都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

在下面的例子中,有一些假设:

  1. 我正在使用Dapper进行数据库访问。它扩展了任何 IDbConnection对象。
  2. 我在数据库中有一个表,其定义为CREATE TABLE Data (Id INT IDENTITY(1, 1) PRIMARY KEY, Data VARBINARY(MAX))
  3. HereReadAllBytes
  4. 的文档

    所以,很明显,因为你没有提供围绕你的表结构的任何东西,你将不得不改变这些代码以满足你的需要,但它会让你开始。

    写作

    this.connection.Open();
    
    try
    {
        var parameters = new
            {
                Data = File.ReadAllBytes(...);
            };
        return connection.Execute("INSERT INTO Data (Data) VALUES (@Data)", parameters);
    }
    finally
    {
        this.connection.Close();
    }
    

    读它

    this.connection.Open();
    
    try
    {
        var parameters = new { Id = 1 };
        return connection.Query(
            "SELECT Data FROM dbo.Data WHERE Id = @Id", parameters)
            .Select(q => q.Data as byte[])
            .Single();
    }
    finally
    {
        this.connection.Close();
    }