现有访问数据库上的 C# 附件字段更新

本文关键字:字段 更新 访问 数据库 | 更新日期: 2023-09-27 18:31:53

>我有一个访问表,我最近在其中添加了一个附件字段。该表是计算机的列表以及有关每台计算机的信息。它的用户、安装的软件等。附件字段将包含从每台计算机接收的简单文本配置文件。

我使用了此处找到的一些代码:使用 .NET 以编程方式管理Microsoft Access 附件类型字段

我的问题是我似乎无法更新正确的字段。这意味着计算机名称 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()时,上面的语句只会给我那行,然后是该行的唯一附件字段。然而,事实并非如此。我已经搜索了如何迭代记录集以找到正确的行,但没有运气。我是新来的,所以我希望我涵盖了我需要的一切。

现有访问数据库上的 C# 附件字段更新

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

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

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

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


更新

如果ComputerName是主键,请不要使用 LIKE 比较,请改用 =

SELECT attachment FROM MyTable WHERE ComputerName = 'Bob'