Параллельное использование базы данных Paradox с c # JET и другой программой

Я ищу, как получить доступ к базе данных Paradox с помощью C #.

Проблема в том, что на рабочей станции есть готовая запущенная программа, использующая целевую базу данных. Пока он не запустится, oleDbConnection.Open() выдает исключение.

Если я не запускаю программу в .NET с того же компьютера, но на другой рабочей станции Windows и использую общую папку, все работает нормально. Исходная программа имеет доступ для чтения / записи, а у меня есть доступ только для чтения по мере необходимости. Конечно, на втором компьютере NET DIR указывает на правильный каталог в общей папке.

Если я использую общую папку и запускаю обе программы (мою и исходную) на одном компьютере и настраиваю BDE для использования общей папки, подключение из C # к базе данных Paradox не может быть открыто.

Я попытался запустить программу из .NET с правами администратора, но это не помогло.

Итак, я беру еще одну программу, редактор базы данных Paradox, и пытаюсь редактировать одну из таблиц, когда запущена исходная программа. На правах пользователя выдает ошибку при доступе к сетевой папке. Но при работе с правами администратора я могу успешно читать базу данных, а также когда только редактор базы данных Paradox работает только с правами учетной записи пользователя.


person Przemysław Staniszewski    schedule 02.01.2012    source источник
comment
IIRC, вам также нужен «частный каталог». Удостоверились ли вы, что разные (копии) программ используют разные пути?   -  person Henk Holterman    schedule 02.01.2012
comment
Мне не ясно, где я должен определить этот «частный каталог» для приложения. В администраторе BDE или в строке подключения для OleDbConnection.   -  person Przemysław Staniszewski    schedule 02.01.2012


Ответы (1)


Похоже, у вас могут быть проблемы с механизмом блокировки Paradox. Когда Paradox (в вашем случае BDE) обращается к таблице, он устанавливает блокировку того или иного типа на таблицу, создавая и делая запись в специальном файле блокировки в каталоге таблицы. Они контролируются одним файлом Paradox.net в определенном месте.

Я думаю, вы говорите, что текущее приложение использует BDE, а вы, возможно, используете что-то еще. Я не уверен, что вы можете это сделать, но если бы вы могли, вам пришлось бы использовать те же файлы блокировки и файл Paradox.net. Кроме того, вам придется использовать ту же парадоксальную логику версий. В этом механизме блокировки были некоторые изменения в нескольких версиях Paradox. Попробуйте запустить каждую программу отдельно и посмотрите, какие файлы она создает и где. Они должны быть такими же.

Я не думаю, что личный каталог так важен. Фактически, два пользователя не могут иметь один и тот же личный каталог.

person Patrick Moloney    schedule 03.01.2012
comment
После комментария Хенка я копался в Google и нашел кое-что интересное sgbd.developpez.com/PDox%20Survival % 20Guide.rtf. В каталоге c: \ application \ у меня есть как минимум 2 каталога: PRIVDIR и MYDATA. При использовании оригинального приложения в Privdir используются PDOXUSRS.NET, Paradox.lck, PDOXUSRS.LCK, в MYDATA Paradox.lck, PDOXUSRS.LCK Запросы с .NET Framework производятся в Privdir PDOXUSRS.NET, в MYDATA PDOXUSRS.LCK и PARADOX.LCK. Таким образом, запросы с помощью .NET Framework не создают Paradox.lck, PDOXUSRS.LCK в PRIVIR. Приложения запускались отдельно. Как указать частный каталог для запросов .NET? - person Przemysław Staniszewski; 05.01.2012
comment
Вот как создать личный каталог progware.org/Blog/post/, но также меняет расположение файла .NET. Цитата из предыдущей ссылки: Параллелизм В многопользовательской среде протокол блокировки Paradox 4.0 поддерживает параллелизм (одновременное использование приложений) через файл PDOXUSRS.NET. Все пользователи, которые хотят поделиться таблицами Paradox, должны сопоставить один и тот же файл PDOXUSRS.NET таким же образом, используя тот же путь, но не обязательно с той же буквой диска. - person Przemysław Staniszewski; 06.01.2012
comment
Да, каждое приложение и каждый пользователь должны использовать один файл Pdoxusrs.net. Этот файл управляет многопользовательским доступом. Для этого он создает 2 файла .lck для каждой таблицы, к которой осуществляется доступ. Но он также удаляет эти файлы .lck, когда пользователи заканчивают работу с таблицами, поэтому в вашей системе не должно быть файлов .lck. Если вы это сделаете, и никто не запускает эти приложения, вы можете удалить их. И вы должны это сделать, потому что что-то не было закончено и не очищено должным образом, и это вызовет проблемы. - person Patrick Moloney; 08.01.2012
comment
Кроме того, Paradox не создает файлы .lck в вашем личном каталоге - значит, у вас там тоже что-то не так. У вас не должно быть настоящих общих таблиц в вашем личном каталоге. И оба приложения должны указывать один и тот же личный каталог. Я понятия не имею, как указать частный каталог при использовании MS dot net. Однако вы можете увидеть, что он использует, а затем изменить свой личный каталог Paradox на это, и они будут такими же. Личный каталог обычно должен находиться на вашем локальном диске (c :) для повышения производительности. - person Patrick Moloney; 08.01.2012
comment
У меня не хватило времени, но я это проверил. После установки NET DIR в BDE (который запускался с правами администратора) приложение .NET использует новый каталог для размещения / использования файла Pdoxusrs.net. Поэтому я настраиваю исходное приложение для использования этого нового личного каталога. К сожалению, они не могли работать параллельно. Я пока не пытаюсь очищать файлы LCK вручную в частном каталоге. Как вы упомянули, в личном каталоге не должно быть файлов .lck. Как я уже писал ранее, .NET Framework не создает файлы .lck в частном каталоге. Исходная доза приложения. - person Przemysław Staniszewski; 10.01.2012
comment
Я допустил наконец одну ошибку в коде. После открытого подключения к базе данных PARADOX я вызываю другие функции, которые создаются SQL, и после этого запускаю их при открытом подключении. Итак, я получаю что-то вроде тайм-аута, но без четкого сообщения, в чем причина. Конечно, причина была в умении писать чистый код;). - person Przemysław Staniszewski; 25.03.2012