2013-08-12 2 views
0

Это написано на Visual Basic с использованием базы данных .mdb на общем диске с oledb-соединениями.vb.net Синхронные обновления db

Пусть у меня есть таблица со следующими 2 записей:

|ID |NAME  |CITY  | 
    |2 |John Smith |Dallas | 
    |15 |Bob Johnson |New York | 

Поскольку OLEDB копирует таблицу локального набора данных затем отправляет его обратно в БД (data.tables("Test").Rows.Add), если 2 человека пытаются одновременно добавить новая запись в слоте третьей строки, приведет ли это к тому, что одна из записей будет потеряна? Если да, то как я могу предотвратить это?

Боковое примечание: для редактирования существующих строк не будет доступа, только добавление новых строк.

Обходной путь: Я сделал так, как было предложено, и установил тестовую программу на цикл и попытался обновить базу данных 100 раз без времени буфера между попытками. В то же время у меня было 2 компьютера. Это привело к тому, что данные были потеряны для одной из программ, когда она пыталась обновиться с той же секунды, но также вызвала ошибку. В конце концов, это произошло очень редко, всего лишь на 3 ошибки в каждом прогоне программы.

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

+0

Почему именно одна из записей будет потеряна? не будут ли они оба добавлены? он работает на соединениях, почему есть связи, если такие вещи происходят. Вы должны попытаться запустить 2 версии одной и той же программы с циклом, который продолжает выполнять команду «Добавить», и установить счетчик на обеих циклах до 1000, возможно, добавить как Thread.Sleep (5000) для обоих. Возможно, они все равно не будут работать одновременно. Попробуйте установить счетчик как 1000000, который может заставить их работать вместе. Проверьте в конце, если у вас есть все 2 000 000 записей. – SSpoke

+0

Причина, по которой человек может потеряться, заключается в том, что oledb копирует db в локальный datatable. когда вы его обновляете, он отправляет локальные данные обратно в базу данных. Так что, если 2 человека попытаются обновить в одно и то же время, очевидно, что первый будет первым, но второй будет в основном просто перезаписать первый. По крайней мере, как это кажется. – thatstevenguy

+0

Откуда вы знаете, что все данные отправляются? если это похоже на любую библиотеку SQL, которую вы отправляете на нее .. и она отправляется вам только тогда, когда вы выполняете команду SELECT, вы имеете в виду, что она обновляет локальный файл на вашем компьютере с помощью базы данных? это «MS Access»? – SSpoke

ответ

0

Во-первых, есть причина, по которой люди в отрасли не используют Access ... простыми словами, это база данных дерьма, прочитанная об этом в википедии.
Моей лучшей ставкой было бы использовать MSSQL, что упростит мне доверие даже в сети (пока вы добавляете исключение из брандмауэра сервера, на котором размещается БД). Используйте MSSQL, если вы не хотите мигранных головных болей, тогда возвращайтесь к нам и расскажите нам, как это происходит. Довольно легко настроить то же самое, что вы настроили для доступа db в VB.
Только что увидел, что u нашел работу, давайте надеяться, что это долговременное решение, которое вы будете использовать в будущих проектах без проблем.

Смежные вопросы