我有一个 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(使用前将#替换为@)