如何通过 .NET 将图像插入 Access OLE 字段

2024-04-13

我有一个 Access .mdb 数据库,我想从 Visual C# 2010 开发的应用程序中插入图像。图片存储在数据库中的 OLE 对象字段中。

直接在 Access 中添加图像后,它们将以位图图像的格式存储。双击这些图片即可在 Access 中打开。

我有以下代码:

OdbcConnection Connection = new OdbcConnection();
...
sql = "INSERT INTO film (poster) VALUES (" ' " + Image.FromFile(textBox8.Text) + " ' ");";
//texbox are stored the picture name
OdbcCommand Command = new OdbcCommand(sql, Connection);
Command.ExecuteNonQuery();

该代码运行良好,但 Access 将图片存储为二进制数据,并且无法在 Access 中再次打开。请告诉我如何将图像作为位图图像插入。谢谢。


这是一个有点不寻常的要求。大多数询问 Access 中 OLE 嵌入图像的人都在询问如何转换它们fromOLE 对象转换为原始二进制数据,而不是相反。当前版本的 Access 具有以下功能Image控件可以显示位图图像,而不必处理添加到对象数据的 OLE“包装器”的复杂性。

不过,这里有一种方法可以满足您的要求。它使用一个Access.Application对象,因此必须在计算机上安装 Access 才能使其工作。它还需要 Access 数据库中的一个表单,其中

  • 表单本身绑定到包含要插入的 OLE 图像字段的表,
  • 表单上的唯一控件是Bound Object Frame,绑定到 OLE 字段。

示例代码还假设正在更新的表有一个名为 [ID] 的数字主键字段。

private void button1_Click(object sender, EventArgs e)
{
    // test data
    int recordIdToUpdate = 15;
    string bmpPath = @"C:\Users\Gord\Pictures\bmpMe.bmp";

    var paths = new System.Collections.Specialized.StringCollection();
    paths.Add(bmpPath);
    Clipboard.SetFileDropList(paths);

    // COM Reference required:
    //     Microsoft Access 14.0 Object Library
    var accApp = new Microsoft.Office.Interop.Access.Application();
    accApp.OpenCurrentDatabase(@"C:\Users\Public\Database1.accdb");
    accApp.DoCmd.OpenForm(
            "PhotoForm",
            Microsoft.Office.Interop.Access.AcFormView.acNormal, 
            null,
            "ID=" + recordIdToUpdate);
    accApp.DoCmd.RunCommand(Microsoft.Office.Interop.Access.AcCommand.acCmdPaste);
    accApp.DoCmd.Close(
            Microsoft.Office.Interop.Access.AcObjectType.acForm, 
            "PhotoForm", 
            Microsoft.Office.Interop.Access.AcCloseSave.acSaveNo);
    accApp.CloseCurrentDatabase();
    accApp.Quit();
    this.Close();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 .NET 将图像插入 Access OLE 字段 的相关文章

随机推荐