0

我试图在 C# 中获得以 0x 开头的相同 BLOB(如 0x12345679 ......),我在 VB6 中获得......问题是旧的 VB6 程序仍在使用,我必须在 C# 中创建一个在将 BLOB 中的 pdf 文件插入数据库之前转换它们的程序...我找到了 VB6 代码(或者我希望我找到它,因为我对 VB6 非常陌生),它使用 AppendChunk 方法导入(创建和导入???) BLOB...

Dim rs, rs2 As Recordset
Dim arrData() As Byte, strFile As String
Const BlockSize = 10240

srcFile = FreeFile
Dim fullname
fullname = IMPORTFOLDER & strFile  // This is the path + the file

Open fullname For Binary Access Read As srcFile

FileLength = LOF(srcFile)                // Get the total size of the file

NumBlocks = FileLength \ BlockSize       // Set number of chunks
LeftOver = FileLength Mod BlockSize      // Set number of remaining bytes

ReDim arrData(LeftOver)

Get srcFile, , arrData()

rs.AddNew
myDocID = NextDocID()
rs!DocumentId = myDocID

rs("DocumentData").AppendChunk arrData()
ReDim arrData(BlockSize)
For i = 1 To NumBlocks
  Get srcFile, , arrData()
  rs("DocumentData").AppendChunk arrData()
Next i
rs.Update

我尝试使用此处的方法,但它不起作用...我使用 NHibernate 自动创建 BLOB 并将其插入数据库,似乎我得到的结果与旧程序中的结果非常接近VB6 确实如此,但又一次.. 它不一样 :( 请告诉我,是否有可能在 C# 中获得与我在 VB6 中获得的相同的 BLOB,以及 C# 中的代码是什么?至少一个想法..请..提前谢谢你。

4

1 回答 1

0

我找到了这个问题的答案。最好的方法是在将 BLOB 插入数据库时​​使用 SQL 参数。因此,首先我们需要将文档作为字节数组读取。接下来我们将显示要插入的参数将是“图像”类型,如下面的代码所示:

private void AddDocument(string photoFilePath)
    {
        //GetFileStream() is a custom function that converts the doc into a stream
        byte[] photo = GetFileStream(photoFilePath);
        var conn = new SqlConnection(@"ConnectionString here");
        var updPhoto = new SqlCommand("UPDATE DT_Document "
                   + "SET DocumentData = @Photo WHERE Id=399", conn);
        updPhoto.Parameters.Add("@Photo", SqlDbType.Image, photo.Length).Value = photo;
        conn.Open();
        updPhoto.ExecuteNonQuery();
        conn.Close();
    }

有人可能会使用存储过程。这并不重要。即使在VB6的问题中文件是由Blocks上传的,这里不是,但最终我们会得到相同的结果。

于 2013-07-24T15:55:22.927 回答