2013-03-21 82 views
1

我試圖插入一個圖片(.bmp)到Filemaker的容器字段。我設法讓它插入正常,但它將其保存爲.dat文件。我想知道是否有一種方法來指定將其保存爲什麼文件類型?插入圖像文件到Filemaker容器使用C#

 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

我也忘了提及它保存爲「Untitled.dat」,所以我也需要指定文件名。謝謝。 – user2009352 2013-03-21 21:01:25

回答

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'和其他類似的STR eams是二進制的,因此您需要聲明一個?佔位符,然後按照您現在這樣執行的方式將查詢與參數綁定。雖然我不確定'FNAM'流,我懷疑它可以簡單地設置爲一個字符串。我不知道如何通過'SIZE',但我認爲FileMaker可以自行計算這一個。

更新: BMP流代碼是'BMPf'