VB.net:使用SQLite读写.Net-Object

时间:2016-11-07 12:37:09

标签: vb.net sqlite

当我想从SQLite数据库中读取FileInfo时,我该怎么办?以下代码工作正常并存储该字段(SQLite中的列是blob):

com.Parameters.Add("@info", DbType.Object)

com.Parameters("@info").Value = New FileInfo(filename)

如何使用FileInfo将查询结果(结果当然只有一个FileInfo)读入SQLiteDataReader

以下代码(rd表示DataReader)产生错误:

  

无法从byte()转换为FileInfo

Dim fi as FileInfo = DirectCast(rd.GetValue(0), FileInfo)

1 个答案:

答案 0 :(得分:2)

为了将FileInfo对象存储为二进制/ BLOB,必须将其转换为字节数组。据我所知,SQLite只知道如何做到这一点,所以你必须自己使用序列化:

Dim bf As New BinaryFormatter
...
Using ms As New MemoryStream
    bf.Serialize(ms, fi)
    ms.Position = 0
    cmd.Parameters.Add("@f", DbType.Binary).Value = ms.ToArray
End Using
cmd.ExecuteNonQuery()

读取结果时,您必须反序列化结果。两者都不是很难,但保存完整的文件名并从中创建一个新的FileInfo会更简单:

If rdr.Read Then
   n = rdr.GetString(0)
   fi = New FileInfo(n)
   ...