1

我在我的 ESE 数据库中的一个表中有一个多值短 ASCII 文本列,其中包含此人的电话号码。

我有一组新值,我想完全擦除旧值,只使用新值。

JET_bitSetRevertToDefaultValue 位似乎不起作用。虽然 MSDN 文档说“它导致列在后续检索列操作中返回默认列值。所有现有列值都被删除。”,我发现它什么都不做(不返回返回值)。

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

我正在编写 C#,并使用最新版本的 ManagedEsent 库。

提前致谢!

4

1 回答 1

1

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

您应该做的是使用 JetRetrieveColumns 检索 JET_RETRIEVECOLUMN 中 itagSequence 为 0 的列(将 pvData 和 cbData 成员保留为 null/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 代码中发现了一个错误——调用后未设置 itagSequence。我刚刚签入了一个修复程序。

于 2010-05-29T07:07:53.577 回答