1

Filemaker のオブジェクト フィールドに画像 (.bmp) を挿入しようとしています。うまく挿入できましたが、.datファイルとして保存されます。保存するファイルの種類を指定する方法があるかどうか疑問に思っていましたか?

        try
        {
            Bitmap tempImage = new Bitmap("C:\\temp\\black.bmp");
            System.IO.MemoryStream stream = new System.IO.MemoryStream();
            tempImage.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
            byte[] image = stream.ToArray();

            OdbcConnection connection = new OdbcConnection("DSN=Filemaker;UID=admin");
            connection.Open();


            OdbcCommand command = new OdbcCommand("INSERT INTO TestDatabase (LocatorNum, FileName, SampleSet, Image) VALUES (" + 
                                                                                                                        "'003'" + ", " + 
                                                                                                                        "'003'" + ", " + 
                                                                                                                        "'003'" + ", " +
                                                                                                                        "?" + ")");

            command.Connection = connection;
            command.Parameters.AddWithValue("?", OdbcType.VarBinary).Value = image;
            command.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
4

1 に答える 1

2

FileMakerコンテナには複数のストリームがあります。各ストリームは、4文字の識別子で識別されます。'FNAM'はファイル名、'SIZE'は画像のサイズ、'FILE'はファイルデータです。コンテナを画像として表示する場合は、サポートされている画像ストリームを使用できます。たとえば'JPEG''PDF '(末尾のスペースに注意してください)などです。

あなたの場合、あなたはあなたのデータをストリームの1つに入れる必要があります。FileMakerが画像形式としてBMPをサポートしているかどうかはわかりませんが、少なくともそのストリームコードは見つかりませんが、少なくともあなたはそれをとして配置し'FILE'ます。PutAs()FileMakerのドキュメントには、次の関数を使用する必要があると書かれています。

PutAs( column, type )

正確に使用されているかどうかはわかりませんが、現時点ではテストできませんが、私が理解していることから、列名に含まれている必要があります。

INSERT INTO TestDatabase
       (LocatorNum, FileName, SampleSet, PutAs(Image, 'FILE'))
VALUES ('003', '003', '003', ?)

たぶん、この方法で複数のストリームを編集できます。

INSERT INTO TestDatabase
       (..., PutAs(Image, 'FILE'), PutAs(Image, 'JPEG'), ...)

'FILE''JPEG'および他の同様のストリームはバイナリであるため、?プレースホルダーを宣言してから、現在の方法でクエリをパラメーターにバインドする必要があります。'FNAM'ストリームについてはよくわかりません。単純に文字列に設定できるのではないかと思います。合格方法はわかりませんが'SIZE'、FileMakerはこれを自分で計算できると思います。

更新: BMPストリームコードは'BMPf'です。

于 2013-03-22T10:10:34.260 に答える