【发布时间】:2017-03-20 13:38:49
【问题描述】:
请不要问我为什么要向数据库写入一个 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
任何帮助将不胜感激 :) 谢谢!
【问题讨论】:
-
你能不能创建一个存储过程来获取一个块并将其附加到已经存储在该字段中的数据上?
-
使用SQLiteBlob object。请注意,这不能改变 blob 的大小;首先使用 zeroblob() 创建 blob 值。