从数据库中检索压缩文件

时间:2012-09-11 16:07:41

标签: c# sql-server-2008 blob compression

我有一个SQL Server 2008-R2数据库,其中有一个存储不同类型文件的表(Word Docs,PDF,TIF等),我可以使用以下方法从数据库中成功检索这些文件:

private void GetFilesFromDatabase()         {             尝试             {                 const string connStr = @“Data Source = localhost \ SQLInstance; Initial Catalog = MyData; Integrated Security = True;”;                 //初始化SQL Server连接。                 SqlConnection CN = new SqlConnection(connStr);

            //Initialize SQL adapter.
            SqlDataAdapter ADAP = new SqlDataAdapter("Select ole_id, ole_object From OLE Where ole_id = 21601", CN);

            //Initialize Dataset.
            DataSet DS = new DataSet();

            //Fill dataset with FilesStore table.
            ADAP.Fill(DS, "FilesStore");

            //Get File data from dataset row.
            byte[] FileData = (byte[])DS.Tables["FilesStore"].Rows[0]["ole_object"];

            string FileName = @"C:\Temp\Text.doc";
            //Write file data to selected file.
            using (FileStream fs = new FileStream(FileName, FileMode.Create))
            {
                fs.Write(FileData, 0, FileData.Length);
                fs.Close();
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

我正在检索的此文件是根据该特定行中包含的其他信息的Word Doc文件。当我在将文件检索到磁盘后尝试打开文件时,数据似乎都是乱码并且无法读取。现在我相信这些文件在被保存到数据库之前已经被压缩但是我不知道如何对它们进行解压缩以便可以查看它们,对于如何实现这一点的任何想法?我的最终目标是将这些图像移动到另一个数据库中。

1 个答案:

答案 0 :(得分:1)

保存文件的代码看起来不错。假设您的原始数据是.DOC文件,并且在保存之后您得到了糟糕的文件。您可能希望在二进制编辑器(即Visual Studio的一个)中查看文件的内容,以确认该文件不是明显不同的文本(text / image ....)。

您需要询问文件存储在数据库中的方式。这是无法远程回答的,因为它可以被压缩,加密,分成块甚至简单地被破坏。