在Access 2010数据库中保存和检索上载的文件

时间:2014-04-07 18:43:54

标签: c# database file-upload

我想在我的数据库中保存一个上传的文件(例如jpg图像),该数据库是在Microsoft Access 2010中构建的,我不知道如何。我在网页后面的代码中使用C#。 我读了一些文章但他们引用的是sql数据库,它们包含二进制字段(我在Access中没有看到它)。这些文章中的大多数都将文件转换为字节数组。

还有另一种方法吗?

注意:我的数据库是.mdb文件。

1 个答案:

答案 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选项编译代码。