【问题标题】:Saving and Retrieving Uploaded File in Access 2010 Database在 Access 2010 数据库中保存和检索上传的文件
【发布时间】:2014-04-08 19:58:56
【问题描述】:

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

还有其他方法吗?

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

【问题讨论】:

  • 可能,您可以将图像编码为base64 字符串并将其存储在string 字段中。

标签: c# database file-upload


【解决方案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 选项编译你的代码。

【讨论】:

  • 是否可以将图片保存在服务器的一个文件夹中,并将图片路径作为字符串类型发送到数据库,然后在检索时将其转换为图片?注意:该文件夹将在 Web 服务中找到。
  • 是的,使用 Access Image 控件。您可以将其Picture 属性设置为文件路径。 If Nz(FilePath) = "" Then Me!image.Visible = False Else Me!image.Picture = FilePath Me!image.Visible = True End If
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
相关资源
最近更新 更多