我想使用 DB4o 存储照片并尝试使用以下代码:
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();
}
}
}
当我点击button2时出现错误。 我必须做出什么改变?
最佳答案
您正在尝试从 WindowForms/WPF(System.Drawing.Bitmap 对象)存储 GUI/绘图对象。然而这不起作用。原因是 GUI 类(Winforms、WPF 等)通常包含对底层绘图系统的引用,例如操作系统资源的 native 句柄。并且这些无法正确序列化。在这种情况下,您创建一个代表图像的类。该类包含图片的表示。通常这是存储图像的 Blob。
有two basic ways来处理 Blob。您可以将 blob 作为字节数组存储在数据库中,或者使用特殊的 db4o-Blob-Type。两者各有优势。
字节数组的优点/缺点:
- blob 位于 db4o-database-file 中。因此只需复制一个文件。
- 字节数组是正常 db4o 事务的一部分,其行为符合预期。
- 存储大 blob 时,您可能会遇到 database-size limitation of db4o 。 (256 GB)
db4o-blob 的优点/缺点
- Blob 作为常规文件存储在数据库外部。这使得数据库本身很小。此外,您只需使用常规应用程序即可访问所有存储的 blob。
- 您始终需要复制 blob 目录和数据库。
- db4o-blob 在 db4o 事务之外工作。这意味着 db4o-blob 的行为与任何其他存储对象不同(并且 API 有点奇怪)。不过,这允许检索 db4o-blob,而不会阻塞当前事务。
对于您的情况,我将在 Person 类中存储带有图片的 byte[] 数组。或者您创建一个特殊的图像类。该图像类包含一个带有图片的字节数组。以及一些将此字节数组与 Winforms 位图相互转换的方法。
关于.net - 如何在Db40中存储和图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3124244/