代码之家  ›  专栏  ›  技术社区  ›  Soonts

如何替换多值ese列中的值?

  •  1
  • Soonts  · 技术社区  · 16 年前

    在我的ese数据库中的一个表中,我有一个多值的短ASCII文本列,它保存着这个人的电话号码。

    我有新的值集,我想彻底清除旧的值,只使用新的值。

    jet-bitsetRevertToDefaultValue位似乎不起作用。而msdn文档说“它会导致列在随后的检索列操作中返回默认的列值。所有现有的列值都将被删除。”,我发现它什么也不做(没有返回值)。

    或者,是否有一种简单的方法来确定列包含多少值(可以是零,例如,当我执行插入操作时,而不是更新操作)?如果是的话,我可以运行一个从“nValues”到1的循环,通过在提供ITagSequence值的同时将其设置为空来擦除该值,以实现我想要的。

    我正在编程C,并使用最新版本的ManagedEvent库。

    提前谢谢!

    1 回复  |  直到 16 年前
        1
  •  1
  •   Laurion Burchall    16 年前

    可以使用JetRetrieveColumns从esent获取多值实例计数。此功能的描述隐藏在msdn文档的备注部分。

    您应该做的是使用JetRetrieveColumns来检索Jet检索列中ITagSequence为0的列(将pvData和cbData成员保留为空/0)。调用之后,ITagSequence成员将包含多值列的实例数。

    JET_RETRIEVECOLUMN retrievecolumn = new JET_RETRIEVECOLUMN();
    retrievecolumn.columnid = multivalueColumn;
    retrievecolumn.itagSequence = 0;
    Api.JetRetrieveColumns(sesid, tableid, new[] { retrievecolumn }, 1); 
    Console.WriteLine("{0}", retrievecolumn.itagSequence);
    

    您需要最新的managedesent源代码才能工作! 当我为此编写测试时,在managedesent代码中发现了一个bug——调用后没有设置ITagSequence。我刚登记了一个修理厂。

    推荐文章