当我想从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)
答案 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)
...