2016-11-07 276 views
0

当我想从SQLite数据库中读取FileInfo时,我需要做什么?下面的代码工作正常,并存储领域(SQLite中列是BLOB):VB.net:使用SQLite读取和写入.Net对象

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

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

如何我读了查询(结果当然是一个FileInfo)的成FileInfo使用SQLiteDataReader的结果呢?

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

can't convert from byte() to FileInfo

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

回答

1

为了使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) 
    ... 
+0

谢谢,这是我近的解决方案。我将不得不存储旧的FileInfo,而不是获得新的FileInfo。但(德)序列化是解决方案,工作正常! – muffi