使用c#将文件附加到ms访问数据库

时间:2016-03-04 04:37:41

标签: c# attachment

我目前正在开展一个项目。文档存储库系统。我使用C#windows窗体和MS Access 2010作为我的数据库。我的文档存储表名为“文档”,有2列,即项目ID和文件(附件数据类型)。我现在可以使用openfiledialog浏览文件,但似乎无法上传它。

以下是我上传按钮的当前代码。

        con = new OleDbConnection(cs);
        con.Open();     
        String num = lblPnum.Text.ToString();
        string a = "INSERT INTO [Documents]([ProjectID]) VALUES('"+ num + "')";

        cmd = new OleDbCommand(a);
        cmd.Connection = con;
        cmd.ExecuteReader();
        con.Close();
        MessageBox.Show("Document Successfully Added", "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Information);
        this.Close();
        FrmHome home = new FrmHome();
        home.Show();
        home.statusPanel.Text = statusPanel.Text;

截至目前,我已经可以根据我选择的项目编号获取项目ID。我需要添加什么才能将文件附加到我的数据库并将其显示到gridview。

3 个答案:

答案 0 :(得分:0)

您可以在MS Access中上传类似文件,请记住特定数据库位于应用程序的Debug文件夹中,Access数据库的名称为 DB

try
        {
            FileInfo file = new FileInfo("file.xlsx");


            using (var connection1 = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB.mdb"))
            {

                OleDbCommand cmd = new OleDbCommand();
                //SqlDataAdapter cmd = new SqlDataAdapter();
                using (cmd = new OleDbCommand("INSERT INTO simple (doc) values (@file)", connection1))
                {
                    //cmd.Connection = connection1;
                    connection1.Open();
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@file", file);
                    cmd.ExecuteNonQuery();
                }
            }

        }
        catch (Exception ex)
        {

        }

答案 1 :(得分:0)

  

Microsoft Access 14.0对象库

处理Access附件类型需要

。示例代码如下。

    private void insertImageFileToMemo(String memoId)
    {
        var dbe = new DBEngine();
        Database db = dbe.OpenDatabase(@"D:\yourdatabase.accdb");
        try
        {
            Recordset rstMain = db.OpenRecordset(
                    "SELECT memoId,memoImage FROM MyMemo WHERE MemoID = '" + memoId + "'",
                    RecordsetTypeEnum.dbOpenDynaset);
            rstMain.Edit();
            Recordset2 rstAttach = rstMain.Fields["memoImage"].Value;
            rstAttach.AddNew();
            Field2 fldAttach = (Field2)rstAttach.Fields["FileData"];
            fldAttach.LoadFromFile("memofile1.jpg");
            rstAttach.Update();
            rstAttach.Close();
            rstMain.Update();
            rstMain.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }

答案 2 :(得分:0)

Microsoft Docs 上的这篇文章有一个工作示例:Work with attachments in DAO

var dbe = new DBEngine();
Database db = dbe.OpenDatabase(DBFilePath, ReadOnly: false);

// first record set is the table
Recordset rs = db.OpenRecordset("SELECT * FROM " + TableName); 
rs.MoveFirst();
rs.Edit(); 

// second record set is the actual field / cell in the table
Recordset2 rs2 = (Recordset2)rs.Fields["Attachments"].Value;

// add document
rs2.AddNew();
Field2 f2 = (Field2)rs2.Fields["FileData"];
f2.LoadFromFile(ImageFile);
rs2.Update();

rs2.Close();
rs.Update();
rs.Close()
相关问题