Как заменить значения в многозначном столбце ESE? - PullRequest
1 голос
/ 28 мая 2010

У меня есть многозначный короткий текстовый столбец ASCII в одной из таблиц в моей базе данных ESE, в котором содержатся номера телефонов этого человека.

У меня есть новый набор значений, и я хотел бы полностью стереть старые значения и использовать только новые значения.

Бит JET_bitSetRevertToDefaultValue, похоже, не работает. Хотя документация MSDN гласит: «Это заставляет столбец возвращать значение столбца по умолчанию при последующих операциях извлечения столбца. Все существующие значения столбца удаляются». Я обнаружил, что он ничего не делает (возвращаемое значение не возвращается).

Или, есть ли простой способ узнать, сколько значений содержит столбец (это может быть ноль, например, когда я делаю вставку, а не обновление)? Если бы это было так, я мог бы просто запустить цикл от 'nValues' до 1, стирая значение, устанавливая его в нуль, предоставляя значение itagSequence, чтобы достичь того, что я хочу.

Я программирую на C # и использую последнюю версию библиотеки ManagedEsent.

Заранее спасибо!

1 Ответ

1 голос
/ 29 мая 2010

Вы можете получить многозначное число экземпляров из ESENT, используя JetRetrieveColumns. Описание этой функции находится в разделе «Примечания» документации MSDN.

Что вам нужно сделать, это использовать JetRetrieveColumns для извлечения столбца с itagSequence в JET_RETRIEVECOLUMN в 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 - после вызова itagSequence не устанавливалось. Я только что проверил исправление.

...