Некоторые данные изменяются в базе данных. Как я могу инициировать некоторый код C#, делающий некоторую работу на эти изменения?

Наиболее вероятная причина наблюдаемого вами поведения заключается в том, что команды openssl, которые вы запускаете непосредственно перед попыткой открыть этот файл (в частности, команда шифрования, которая, похоже, создает файл), еще не завершены. Вы не говорите методу Run ждать возвращения команд, поэтому они работают асинхронно в фоновом режиме. Предположительно, WScript.Echo добавляет достаточную задержку для завершения шифрования, прежде чем код переходит к открытию файла. Использование WScript.Sleep вместо того, чтобы что-то повторять, вероятно, имело бы такой же эффект.

Чтобы устранить проблему, дождитесь возвращения внешних команд.

Замените эти строки:

encryptOpts = encryptorPath & ...
oShell.Run (encryptOpts)
decryptOpts = encryptorPath & ...
oShell.Run (decryptOpts)

на это:

encryptOpts = encryptorPath & ...
oShell.Run encryptOpts, 0, True
decryptOpts = encryptorPath & ...
oShell.Run decryptOpts, 0, True

Также рекомендуется проверить состояние выхода внешних команд, чтобы вы могли увидеть, если что-то пошло не так:

rc = oShell.Run(encryptOpts, 0, True)
If rc <> 0 Then
    'an error occurred
End If

6
задан Theo Lenndorff 5 February 2009 в 00:12
поделиться

5 ответов

Я пошел бы с № 1. Это не на самом деле столько трафика, сколько Вы могли бы думать. Если Ваши данные часто не изменяются, можно быть пессимистичными об этом и только выбрать что-то, что дает Вам да или нет об изменениях таблицы.

При разработке схемы с опросом в памяти, Вы не можете действительно подвергнуться так большой части хита на опрос.

  • Если Вы только добавляете записи, не изменяя их, то проверка самого высокого идентификатора могла бы быть достаточно на конкретной таблице.

  • При обновлении их всех затем, можно сохранить столбец метки времени и индексировать его, то искать максимальную метку времени.

  • И можно отправить запрос ubber, который опрашивает несколько таблиц (эффективно) и возвращает список измененных таблиц.

Ничто в этом ответе не особенно умно, я просто пытаюсь показать, что № 1 не может быть вполне настолько плохим, как это сначала кажется.

1
ответ дан 17 December 2019 в 18:20
поделиться

Я пошел бы с решением № 1 (опрос), потому что предотвращение зависимостей и прямых подключений между отдельными приложениями может помочь уменьшить сложность и проблемы.

1
ответ дан 17 December 2019 в 18:20
поделиться

Я думаю, что Вы покрыли подходы, о которых я думал, нет никакого абсолютного "лучшего" способа сделать это, какие вопросы являются Вашими требованиями и приоритетами.

Лично мне нравится элегантность класса SqlDependency; и что независимость базы данных имеет значение в реальном мире для большинства приложений так или иначе? Но если это - приоритет для Вас иметь независимость базы данных затем, Вы не можете использовать это.

Опрос является моим вторым фаворитом, потому что он содержит базу данных в чистоте от триггеров и прикладной логики; это действительно не плохая опция так или иначе потому что, поскольку Вы говорите, что это просто. Если бы приложение B может ожидать несколько минут за один раз прежде "замечающий" изменения базы данных, это был бы хороший вариант.

Таким образом, мой ответ: это зависит.:)

Удачи!

1
ответ дан 17 December 2019 в 18:20
поделиться
  1. Вы действительно заботитесь о независимости базы данных?
  2. Действительно случилось бы так, что трудно для создания механизма различия для каждого типа БД, что у всех есть тот же открытый интерфейс?

Я знаю о OracleDependency в ODP.NET, но что относительно других баз данных?

SQL Server имеет что-то как этот, но я никогда не использовал его.

0
ответ дан 17 December 2019 в 18:20
поделиться

Можно сделать класс MySqlDependency и реализовать SqlDependency или SqlDependencyForOracle (объединение)

0
ответ дан 17 December 2019 в 18:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: