如何从sqlite存储和检索blob
发布时间:2020-12-12 19:19:07 所属栏目:百科 来源:网络整理
导读:我在c,python和现在(可能)在C#中使用了sqlite。在所有这些我不知道如何插入一个blob到表中。如何在sqlite中存储和检索blob? 这里是如何在C#中做到这一点: class Program{ static void Main(string[] args) { if (File.Exists("test.db3")) { File.Delete(
我在c,python和现在(可能)在C#中使用了sqlite。在所有这些我不知道如何插入一个blob到表中。如何在sqlite中存储和检索blob?
这里是如何在C#中做到这一点:
class Program { static void Main(string[] args) { if (File.Exists("test.db3")) { File.Delete("test.db3"); } using (var connection = new SQLiteConnection("Data Source=test.db3;Version=3")) using (var command = new SQLiteCommand("CREATE TABLE PHOTOS(ID INTEGER PRIMARY KEY AUTOINCREMENT,PHOTO BLOB)",connection)) { connection.Open(); command.ExecuteNonQuery(); byte[] photo = new byte[] { 1,2,3,4,5 }; command.CommandText = "INSERT INTO PHOTOS (PHOTO) VALUES (@photo)"; command.Parameters.Add("@photo",DbType.Binary,20).Value = photo; command.ExecuteNonQuery(); command.CommandText = "SELECT PHOTO FROM PHOTOS WHERE ID = 1"; using (var reader = command.ExecuteReader()) { while (reader.Read()) { byte[] buffer = GetBytes(reader); } } } } static byte[] GetBytes(SQLiteDataReader reader) { const int CHUNK_SIZE = 2 * 1024; byte[] buffer = new byte[CHUNK_SIZE]; long bytesRead; long fieldOffset = 0; using (MemoryStream stream = new MemoryStream()) { while ((bytesRead = reader.GetBytes(0,fieldOffset,buffer,buffer.Length)) > 0) { stream.Write(buffer,(int)bytesRead); fieldOffset += bytesRead; } return stream.ToArray(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |