2013-03-21 2 views
1

Filemaker의 컨테이너 필드에 그림 (.bmp)을 삽입하려고합니다. 나는 그것을 잘 삽입 할 수 있었지만, .dat 파일로 저장했다. 어떤 파일 형식으로 저장할지 지정하는 방법이 있는지 궁금합니다.C를 사용하여 Filemaker 컨테이너에 이미지 파일 삽입

 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

답변

2

FileMaker 컨테이너에는 여러 스트림이 있습니다. 각 스트림은 4 문자 식별자로 식별됩니다. 'FNAM'은 파일 이름이고 'SIZE'은 이미지 크기이며 'FILE'은 파일 데이터입니다. 컨테이너를 이미지로 표시하려면 지원되는 이미지 스트림 (예 : 'JPEG', 'PDF ' (후미 공백에주의) 등이 있습니다.

귀하의 경우에는 데이터를 스트림 중 하나에 넣어야합니다. FileMaker가 BMP를 이미지 형식으로 지원하는지는 모르겠지만 최소한 스트림 코드를 찾을 수는 없지만 최소한 'FILE'으로 지정하십시오. 하지만 난 그게 열 이름 사이에 있어야합니다 이해 것과,

PutAs(column, type) 

내가 사용하는 그것과 지금 테스트 할 수있는 방법을 정확히 모르겠어요 : 파일 메이커의 문서는 당신이 PutAs() 기능을 사용할 필요가 있다고

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'입니다.