请不要费心问我为什么要将 13GB(或更多(的文件写入数据库 - 我必须这样做只是野兽的本性。
我的问题是我认为它将其全部加载到内存中,我不想这样做,我需要使用尽可能少的内存将其以块或动态方式流式传输到 blob 中。
这是我目前拥有的代码:
Using fs As New System.IO.FileStream(InPutFile, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
Using sr As New System.IO.StreamReader(fs)
Dim data(fs.Length - 1) As Byte
fs.Read(data, 0, fs.Length)
Using cmd As New SQLite.SQLiteCommand(TSQLDB)
data = IO.File.ReadAllBytes(InPutFile)
cmd.CommandText = "UPDATE [FileSpace] SET [FileData]=@DAT WHERE [ID]=" & MyID
cmd.Prepare()
cmd.Parameters.Add("@DAT", DbType.Binary, fs.Length)
cmd.Parameters("@DAT").Value = data
cmd.ExecuteNonQuery()
cmd.Dispose()
End Using
data = Nothing
End Using
End Using
任何帮助将不胜感激:)谢谢!
我认为SQLite可能存在限制 - 仅查看 sqlite.org 网站,blob 仅限于 2147483647 字节,仅相当于大约 2GB。我找到了一个命令:SQLITE_LIMIT_LENGTH
我认为解决此问题的唯一另一种方法是让我插入它,将文件拆分为 2GB 块并以这种方式插入它们,然后在保存时将 blob 重新合并到一个文件中。没有什么是容易的!- 感谢您的评论 - 它给了我思考的食物,让我找到了这个可能的解决方案。