2010-06-26 44 views
2

我想門店照片使用了db4o和試圖去下面的代碼:如何在Db40中存儲和圖片?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
using Db4objects.Db4o; 
using Db4objects.Db4o.Linq; 

namespace imagemsDb4o 
{ 

class Person 
public class Person 
{ 
    public string Name { set; get; } 
    public byte foto { set; get; } 
} 

    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

      private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void button1_Click_1(object sender, EventArgs e) 
     { 
      FileInfo fi = new FileInfo("c:\\test.yap"); 
      if (fi.Exists) 
       fi.Delete(); 
      pictureBox1.Load("c:\\sunset.jpg"); 

      Person pers = new Person(); 
      pers.Name = "Martin"; 
      pers.bild = (System.Drawing.Bitmap)(pictureBox1.Image); 

      IObjectContainer db = Db4oFactory.OpenFile("c:\\test.yap"); 
      db.Store(pers); 
      db.Commit(); 
      db.Close(); 
     } 

     private void button2_Click_1(object sender, EventArgs e) 
     { 
      Person suchpers = new Person(); 
      suchpers.Name = "Martin"; 

      IObjectContainer db = Db4oFactory.OpenFile("c:\\test.yap"); 
      IObjectSet result = db.QueryByExample(suchpers); 
      Person gefunden = (Person)result.Next(); 

      textBox2.Text = (string) gefunden.Name; 

      pictureBox2.Image = (byte) gefunden.bild; 
      db.Close(); 
     } 

    } 
} 

它給錯誤,當我點擊按鈕2。 我必須做什麼改變?

回答

1

我想你應該將圖片轉換爲字節數組分配給照片屬性之前和字節數組轉換回位分配給PictureBox的

+0

拉傑,請你給我發一個litle例句嗎?預先感謝您 – 2010-06-27 16:52:33

+0

你好Salamao 對不起剛剛拿起你的筆記。我看到加洛已經迴應了你的要求。 – Raj 2010-06-28 14:32:50

3

你想存儲的圖像屬性之前來自WindowForms/WPF的GUI- /繪圖對象(System.Drawing.Bitmap-Object)。但是這不起作用。原因在於GUI類(Winforms,WPF等)經常包含對底層繪圖系統的引用,如對OS資源的本地句柄。那些無法正確序列化。我在這種情況下創建了一個代表圖像的類。這個類包含圖片的表示。通常這是一個存儲圖像的Blob。

two basic ways來處理Blob。要麼將數據庫中的Blob存儲爲字節數組,要麼使用特殊的db4o-Blob-Type。兩者都有其優點。

優點/缺點與字節數組:

  • 的斑點是在db4o的數據庫文件。所以只有一個文件需要複製。
  • 字節數組是正常db4o事務的一部分,並且按預期運行。
  • 當存儲較大的斑點時,您可能會碰到database-size limitation of db4o。 (256 GB)

優勢/弱勢使用db4o-斑點

  • 的Blob存儲爲數據庫外部常規文件。這使數據庫本身很小。此外,您只需使用常規應用程序即可訪問所有存儲的斑點。
  • 你總是需要複製blob目錄和數據庫。
  • db4o-blobs在db4o事務之外工作。這意味着db4o-blob的行爲與任何其他存儲對象的行爲不同(並且API有點奇怪)。但是,這允許在不阻止當前事務的情況下檢索db4o-blob。

爲了您的情況,我會在Person類中存儲一個帶有圖片的byte []數組。或者你創建一個特殊的圖像類。這個圖像類包含一個帶有圖片的字節數組。以及將這個字節數組轉換爲Winforms位圖的幾種方法。

+0

pf。請問我是否有這樣的例子? – 2010-06-27 16:44:49

+0

Gamlor, 請您發送或給我一個litle例句? 預先感謝您 – 2010-06-27 16:51:46

+0

謝謝你甘美。我知道了! 非常感謝! – 2010-06-28 04:34:50

相關問題