私のWebサービスのサブタスクは、ファイルを(いくつかのメタデータとともに)データベースに保存することです。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[]
配列を処理する方法を変更するための解決策を見つけられませんでした。Javaで可能なのでDatabaseField
、に設定するために使用できるdataType
属性はありません。BYTE_ARRAY
@DatabaseField(dataType = DataType.BYTE_ARRAY)
byte[] imageBytes;
私は何か重要なものを見逃したことがありますか?
ファイルをデータベースに取り込む別の方法はありますか?