使用C#检索VB6应用程序保存在SQL二进制字段中的文件

本文关键字:字段 二进制 文件 SQL 存在 检索 VB6 应用程序 保存 使用 | 更新日期: 2023-09-27 18:30:10

我有一个数据库,在一个二进制列中有一堆保存的文件。我想使用linq检索它们。

我有以下代码,当数据库中的文件是.tif文件时,它可以很好地工作:

var Bytes = TblBriefingImages.Where(si => si.ImageName == t.FileName 
                                            && si.ImageType == t.ImageType 
                                            && "B" + si.SourceDocumentNumber == t.BriefingNumber)
                                            .Select(si => si.Image.ToArray())
                                            .SingleOrDefault();
            File.WriteAllBytes(t.FullPath,Bytes);

当数据库中的文件是另一种格式(pdf、doc、jpg)时,它就会损坏。

将文件写入数据库的应用程序是VB6,并且正在运行:

   ' Copy the bitmap to the temporary file chunk by chunk:
    Dim buffer() As Byte                    'used to avoid UNICODE string
    intHandle = FreeFile
    Open strTempFileName For Binary Access Write As #intHandle
    For i = 0 To lngBuffers
        buffer() = !Image.GetChunk(BUFFER_SIZE)
        Put #intHandle, , buffer()
    Next i
    Close #intHandle

评论:

'用于避免UNICODE字符串

这让我相信这可能是一个编码问题,但我不知道它可能使用了什么编码。

我也尝试过使用文件流而不是文件。WriteAllBytes,并产生一个相同的文件:

var fs = File.Create(t.FullPath,Bytes.Length);
fs.Write(Bytes,0,Bytes.Length);
fs.Close();

使用C#检索VB6应用程序保存在SQL二进制字段中的文件

事实证明,在VB6 UI层中存在一些意外的代码,这些代码正在将其他类型转换为zip文件或从zip文件中转换。

我输入了一些代码来检测这些文件类型何时被使用,并将文件重命名为:

var newPath = Path.ChangeExtension(T.FullPath, ".Zip");
File.Move(T.FullPath, newPath);