我的网络服务的一个子任务是在数据库中保存一个文件(连同一些元数据)。
Web 服务基于ServiceStack及其版本的ORMlite。
所以我创建了一个代表数据库中附件的小类:
public class Attachment {
public string Description { get; set; }
public string FileName { get; set; }
public string Type { get; set; }
public byte[] Data { get; set; }
}
这是实际的文件
MemoryStream ms = new MemoryStream(webclient.DownloadData(...));
byte[] data = new byte[...];
ms.Read(data, 0, data.Length);
Attachment file = new Attachment() {
/* all the other stuff */
Data = data
};
直到现在都没有问题...... :)
现在我已经有了将这个文件放入数据库所需的一切。所以让我们开始吧...
dbCmd.Insert<Attachment>(file);
还有问题...
SqlException: "Operand type clash: text is incompatible with image"
ORMlite 将字节数组转换为 base64 编码的字符串
/* stripped-down example of the command string */
INSERT INTO Attachment (Data) VALUES ('CgoKCgoKCjxodG1sPgo8a...AAAA==')
我已经搜索了一整天,但没有找到改变 ORMlite 处理byte[]
数组方式的解决方案。没有DatabaseField
我可以用来设置的属性,dataType
因为BYTE_ARRAY
这在 Java 中是可能的。
@DatabaseField(dataType = DataType.BYTE_ARRAY)
byte[] imageBytes;
我错过了什么重要的东西吗?
是否有另一种方法可以将文件放入数据库?