1

我正在尝试将图片 (.bmp) 插入 Filemaker 的容器字段中。我设法让它插入正常,但它将它保存为 .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 容器有多个流。每个流由四个字符的标识符标识:'FNAM'是文件名、'SIZE'是图像尺寸、'FILE'是文件数据。如果您希望容器显示为图像,您可以有一个支持的图像流,例如'JPEG''PDF '(注意尾随空格)等等。

在您的情况下,您需要将数据放入其中一个流中。我不知道 FileMaker 是否支持 BMP 作为图像格式,至少我找不到它的流代码,但至少你把它作为'FILE'. FileMaker 文档说您需要使用该PutAs()功能:

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 回答