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

时间:2010-05-28 13:56:23

标签: c# esent

我的ESE数据库中的一个表中有一个多值短ASCII文本列,用于保存此人的电话号码。

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

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分: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 。我刚刚检查了一下。

相关问题