2017-03-19 13 views
1

なぜ私は13GB(またはそれ以上)のファイルをデータベースに書きたいのか迷惑をかけないようにしてください。SQLiteに大きなブロブを挿入する

私の問題は、すべてをメモリにロードしていて、それをしたくないと思っています。可能な限り小さなメモリを使用して、ブロブにストリームを流すか、オンザフライでストリームする必要があります。ここ

は、私が現在持っているコードです:

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][email protected] 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 

任意の助けが最もいただければ幸いです:)ありがとう!

+0

チャンクを取り出し、そのフィールドに既に格納されているデータに追加するストアドプロシージャを作成できますか? – MrGadget

+0

[SQLiteBlobオブジェクト](http://stackoverflow.com/questions/41041820/error-retrieving-blob-field-using-system-data-sqlite-sqlitedatareader-getblob)を使用します。これはブロブのサイズを変更できないことに注意してください。最初に[zeroblob()](http://www.sqlite.org/lang_corefunc.html#zeroblob)でblob値を作成します。 –

答えて

0

SQLiteには限界があると思われます。sqlite.orgのWebサイトを見れば、BLOBは2147483647バイトに制限されています。これは約2GBにすぎません。私が見つけたコマンドがあります:SQLite_LIMIT_LENGTH

私はこれを挿入するには、これは2GBのチャンクにファイルを分割し、その方法で挿入して再結合することです。保存するときにブロブを1つのファイルにまとめます。何も簡単です! - しかし、コメントのおかげで - それは私に考えのための食糧を与え、この可能な解決策を見つけることができました。

関連する問題