我尝试将图片(.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);
}
答案 0 :(得分: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'
。