2008-11-14 6 views
3

У нас есть основное торговое приложение VB6, которое использует MS Access (не спрашивайте!). Это всегда взрывные сделки в базе данных MS Access.Доступ только для чтения Доступ к источнику данных

Остальная часть инфраструктуры здесь значительно продвинулась, и я хочу периодически читать эту базу данных Access и копировать любые новые сделки в базу данных SQL-сервера.

SQL и C#, необходимые для этого, тривиально легки.

НО Я хочу убедиться, что я делаю это так, чтобы не блокировать базу данных Access или создавать проблемы для приложения VB6. Другими словами, при заполнении моего DataTable из Access я НЕ хочу блокировать базу данных и препятствовать тому, чтобы приложение VB6 записывалось в нее. Кажется, я помню, что из старого ADO были режимы совместного использования, которые вы могли бы использовать для этой цели.

Какую строку подключения следует использовать из .NET для выполнения этого?

ответ

0

Просто идея ... но вы подумали об обновлении базы данных, чтобы сами таблицы фактически хранились в SQL Server, а Access просто стал интерфейсом? Это было немного, но если я правильно помню, Access должен иметь волшебника (yuck!), Чтобы помочь вам в этом.

Со старым ADO вы можете установить курсор или блокировки механизма типа к одному из следующих вариантов:

Тип курсора

adOpenForwardOnly Этот тип курсора может использоваться только для продвижения вперед через набор записей. Эта опция используется, когда необходимо заполнить список или поле со списком.

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

adOpenDynamic Этот курсор позволяет увидеть все изменения, сделанные другими пользователями, которые влияют на наш набор записей. Это самый мощный тип курсора, но самый медленный.

adOpenStatic Статический курсор полезен, когда у нас есть небольшой набор записей.

Тип замок

adLockReadonly Этот режим блокировки используются, когда нет дополнения, обновления и удаления не допускаются из записей

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

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

adLockBatchOptimistic Эта опция позволяет выполнять оптимистическую блокировку, когда мы обновляем партию записей

Не уверен, как это точно переводится в мир .NET ... но, возможно, это может заставить вас указывать в правильном направлении.

+0

Я хотел бы обновить его до SQL Server, но это не для меня, к сожалению. У этих парней есть отношение «это работает, кто заботится» – rc1 2008-11-14 15:58:57

+0

Да, у Access есть мастер Upsizing Wizard ... это терпимо, но вам все равно придется самим исправить таблицы, если это возможно. – 2008-11-14 16:02:21

+0

Обновление этого приложения займет гораздо больше, чем мастер увеличения ... на данный момент есть только более крупные приоритеты. Такова жизнь! – rc1 2008-11-14 16:03:29

0

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

Установка режима в строке подключения на «Чтение» должна делать трюк.

"Data Source=C:\IronSpeed\TestAccessDB\TestTypes.mdb; 
Jet OLEDB:Database Locking Mode=1; 
Mode=Read" 

Некоторые ссылки, которые могут помочь.

1

Чтобы построить на ответ Мэтта, я бы рекомендовал комбинацию adOpenForwardOnly и adLockReadonly: ForwardOnly потому, что вам просто нужно вставить эти сделки Into SQL Server, и Readonly, чтобы вы не блокировали другие процессы (что еще могло бы повлиять на эти таблицы?). К счастью, это параметры по умолчанию. :)

0

У вас есть несколько решений для этого, как открытие записей только для чтения через соединения ADO (OLEDB). Эти наборы записей могут быть локально сохранены/заархивированы в виде файлов xml для дальнейшего использования.

Но самым тривиальным решением было бы сделать копию исходного файла mdb (что может быть сделано в любое время, даже если некоторые из таблиц заблокированы). Затем вы можете делать все, что захотите, с скопированной базой данных, без какого-либо риска вмешательства в работу приложения VB6.

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