现有Access DB上的C#附件字段更新

时间:2012-04-20 19:45:13

标签: c# attachment-field

我有一个Access表,我最近添加了一个附件字段。该表是计算机列表和每台计算机的信息。它的用户,安装的软件等。 “附件”字段将包含从每台计算机接收的简单文本配置文件。

我使用了一些代码:Programmatically managing Microsoft Access Attachment-typed field with .NET

我的问题是我似乎无法更新正确的字段。这意味着计算机名称Bob的配置文件将被放置在正确的字段中,但如果有意义则将其放在错误的计算机上。下面是一个SQL语句示例。

Select * From MyTable WHERE ComputerName Like 'Bob'

根据要求提供以下整个代码段。

public void InsertFile(String Path, String CmpName)
{   
    DBEngine dbe = new DBEngine();
    Database db = dbe.OpenDatabase("MyAccessDB.accdb", false, false, "");
    Recordset rs = db.OpenRecordset(
        "SELECT * FROM MyTable WHERE ComputerName LIKE '" + CmpName + "\'",
        RecordsetTypeEnum.dbOpenDynaset, 0, LockTypeEnum.dbOptimistic);
    rs.MoveFirst();
    rs.Edit();
    Recordset2 rs2 = (Recordset2)rs.Fields["My_File"].Value;
    rs2.AddNew();
    Field2 f2 = (Field2)rs2.Fields["FileData"];
    f2.LoadFromFile(Path);

    rs2._30_Update();
    rs2.Close();
    rs._30_Update();
    rs.Close();          
}

我希望在使用OpenRecodeset()时,上面的语句会给我一行,然后是该行的唯一附件字段。然而,这种情况并非如此。我已经搜索过如何迭代记录集以找到没有运气的正确行。我是新来的,所以我希望我能够涵盖所需的一切。

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解您的问题,但如果您想要的只是附件字段,那么您的SQL查询应该是:

"SELECT attachment FROM MyTable WHERE UCASE(ComputerName) = 'BOB'"

答案 1 :(得分:0)

请注意,只有当字段WHERE ComputerName Like 'Bob'是主键字段或者您在其上定义了唯一索引时,where子句ComputerName才能可靠地工作。

在任何情况下,您都应该定义主键,这样可以确保以可靠的方式识别要更新的表记录。


<强>更新

如果LIKE是主键,请勿使用ComputerName比较,而是使用=

SELECT attachment FROM MyTable WHERE ComputerName = 'Bob'