C# 如何通过.NET将图像插入Access OLE字段
我有一个Access.mdb数据库,我想插入一个来自visual C#2010中开发的应用程序的图像。图片存储在数据库的OLE对象字段中 在Access中直接添加图像后,图像以位图图像的格式存储。双击即可在Access中打开这些图片 我有以下代码:C# 如何通过.NET将图像插入Access OLE字段,c#,database,image,ms-access,ole,C#,Database,Image,Ms Access,Ole,我有一个Access.mdb数据库,我想插入一个来自visual C#2010中开发的应用程序的图像。图片存储在数据库的OLE对象字段中 在Access中直接添加图像后,图像以位图图像的格式存储。双击即可在Access中打开这些图片 我有以下代码: OdbcConnection Connection = new OdbcConnection(); ... sql = "INSERT INTO film (poster) VALUES (" ' " + Image.FromFile(textBox
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的图像的人都在询问如何将它们从OLE对象转换为原始二进制数据,而不是反过来。当前版本的Access具有类似于
Image
控件的功能,该控件可以显示位图图像,而无需处理添加到对象数据中的OLE“包装器”的复杂性
不过,这里有一种方法可以满足您的要求。它使用了一个Access.Application
对象,因此必须在计算机上安装Access才能工作。它还需要Access数据库中的一个表单,其中
- 表单本身绑定到包含要插入的OLE图像字段的表
- 表单上唯一的控件是绑定到OLE字段的
绑定对象帧
private void按钮1\u单击(对象发送者,事件参数e)
{
//测试数据
int-recordIdToUpdate=15;
字符串bmpPath=@“C:\Users\Gord\Pictures\bmpMe.bmp”;
var path=new System.Collections.Specialized.StringCollection();
添加路径(bmpPath);
剪贴板.SetFileDropList(路径);
//需要COM参考:
//Microsoft Access 14.0对象库
var accApp=new Microsoft.Office.Interop.Access.Application();
OpenCurrentDatabase(@“C:\Users\Public\Database1.accdb”);
accApp.DoCmd.OpenForm(
“照片形式”,
Microsoft.Office.Interop.Access.AcFormView.acNormal,
无效的
“ID=“+recordIdToUpdate”);
accApp.DoCmd.RunCommand(Microsoft.Office.Interop.Access.AcCommand.acCmdPaste);
accApp.DoCmd.Close(
Microsoft.Office.Interop.Access.AcObjectType.acForm,
“照片形式”,
Microsoft.Office.Interop.Access.AcCloseSave.acSaveNo);
accApp.CloseCurrentDatabase();
accApp.Quit();
这个。关闭();
}
我已经有了一种从ole文件中检索图片到c#程序(剪切ole头)的方法,现在我需要一种反向方法。您提出了一个非常有趣的方法,但我只需要使用C sharp工具,而不需要更改db。无论如何谢谢你@用户3260339,如您所愿。请记住,访问表单不一定必须与要更新的表位于同一数据库文件中。它可以位于带有链接表的单独Access数据库文件中。那也行。(事实上,如果包含该表的数据库文件是多用户环境中的共享后端,则这是必需的。)在OLE字段中将图像插入MS Access数据库的100%工作代码
private string ImageToBase64String(Image image)
{
using (MemoryStream stream = new MemoryStream())
{
image.Save(stream, image.RawFormat);
return Convert.ToBase64String(stream.ToArray());
}
}
private void SaveButton()
{
string Pic = ImageToBase64String(PicBox.Image);
OleDbCommand PicSave = new OleDbCommand("INSERT INTO Picture(ID,PICTURE)VALUES(" + PicId.Text + ",'" + Pic + "')", con);
con.Open();
var SaveValue = PicSave.ExecuteNonQuery();
if (SaveValue > 0)
{
MessageBox.Show("Record Saved", "Information");
ValueClear();
}
else
MessageBox.Show("Rocord Not Saved", "Erro Msg");
con.Close();
}