我想在我的数据库中保存一个上传的文件(例如jpg图像),该数据库是在Microsoft Access 2010中构建的,我不知道如何。我在网页后面的代码中使用C#。 我读了一些文章但他们引用的是sql数据库,它们包含二进制字段(我在Access中没有看到它)。这些文章中的大多数都将文件转换为字节数组。
还有另一种方法吗?
注意:我的数据库是.mdb文件。
答案 0 :(得分:1)
在Access数据库中,您可以使用“OLE对象”字段来存储二进制信息。
您可以将图像插入OLE对象字段,如下所示:
string imagePath = @"C:\Users\Me\Pictures\rubic.png";
byte[] imageBytes = File.ReadAllBytes(imagePath);
using (var conn = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\access.mdb"))
{
using (var cmd = new OleDbCommand(
"INSERT INTO tblImages ([image], [name]) VALUES (@1, @2)", conn))
{
conn.Open();
cmd.Parameters.AddWithValue("@1", imageBytes);
cmd.Parameters.AddWithValue("@2", "Rubic's cube");
cmd.ExecuteNonQuery();
}
}
您可以使用以下方法检索图像:
string imageSavePath = @"C:\Users\Me\Desktop\test.png";
byte[] imageBytes;
using (var conn = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\access.mdb"))
{
using (var cmd = new OleDbCommand(
"SELECT [image] FROM tblImages WHERE id = 1", conn))
{
conn.Open();
imageBytes = (byte[])cmd.ExecuteScalar();
}
}
File.WriteAllBytes(imageSavePath, imageBytes);
这适用于任何类型的二进制数据。
Jet OleDb提供程序仅以32位运行。因此,使用x86选项编译代码。