Pull to refresh

Comments 5

Немного замечаний.
1. При формировании ConntcntionString лучше использовать «Dialect=3». Диалект 1-й был давно для совместимости с InterBase 5.x.
2. Лучше прямо указать место расположения базы «Database=c:\fb_base\base.gdb»
3. Чтобы не использовать стандартную GDS32.DLL достаточно в строке подключения указать нужную «ClientLibrary=c:\fbemb\fbclient.dll»
4. Если разговор идет о Powershell то вероятнее всего DataSet не нужен, достаточно однонаправленного FirebirdClient.FbDataReader, много быстрее и менее требователен к памяти (в памяти только текущая строка из БД), но есть свои минусы.
5. При подключении в параметрах транзакции указать readonly.
Большое спасибо за замечания, критика очень важна :)
1. При формировании ConntcntionString лучше использовать «Dialect=3». Диалект 1-й был давно для совместимости с InterBase 5.x. — можно ссылку на статью чтобы понять принципиальное отличие.
2. Лучше прямо указать место расположения базы «Database=c:\fb_base\base.gdb» — не соглашусь, лучше указывать сетевой путь, поскольку можно в последствии контролировать подключение на уровне сетевого подключения, удобно но linux серверах.
3. Чтобы не использовать стандартную GDS32.DLL достаточно в строке подключения указать нужную «ClientLibrary=c:\fbemb\fbclient.dll» — использование абсолютных путей в промышленных решениях не желательно, при необходимости развертывания на большом количестве серверов.
4. Если разговор идет о Powershell то вероятнее всего DataSet не нужен, достаточно однонаправленного FirebirdClient.FbDataReader, много быстрее и менее требователен к памяти (в памяти только текущая строка из БД), но есть свои минусы. — если реализация метода подключения вынесена в отдельную функцию, то результат лучше возвращать в DataSet, за идею спасибо, но пока не выполнял на столько тяжелых запросов, что бы прибегать к оптимизации потребления памяти.
5. При подключении в параметрах транзакции указать readonly.- это только при select, а если необходимо выполнять CRUD, придется делать коминт.
ОК.
1. Статей достаточно много на сайте www.ibase.ru. Как пример миграция статья от 2000г!
2. С сетевым путем работать не будет (если база в расшаренной сетевой папке), FireBird принимает в качестве строки подключения локальный путь на указанном сервере или данная настройка (alias) должна быть выполнена в конфиге Firebird.
В общем виде строка подключения выглядит как ServerName:local\path\to\database.fdb если локальный путь не указан, то database.fdb будет искаться рядом с исполняемым файлом.
3. Абсолютный путь указан как пример, достаточно указать нужную ClientLibrary и положить ее рядом с исполняемым файлом (без указания пути). Такой подход дает возможность вообще не ставить на клиента Firebird, достаточно скопировать папку с файлами (из настроенного Firebird embedded, например Win 64-bit Embedded).
Не совсем понял про промышленные решения, статья начиналась
Иногда у системных инженеров возникает необходимость получить определенный набор данных непосредственно из самой СУБД средствами Powershell.
Я так понимаю это какие-то разовые мероприятия.
5. Поскольку в примере после $adDB.Fill($dsDB) идет сразу $cnDB.Close(), не вижу смысла открывать пишущую транзакцию. При обновлениях из Dataset'а нужна отдельная короткая пишущая, при чтении сильно рекомендуется открывать транзакцию с параметром readonly см. статью про транзакции:
Для читаемых (справочных) данных имеет смысл выделить отдельную транзакцию read read_committed rec_version, поскольку такая транзакция стартует в состоянии committed и может длиться вечно. Также можно попробовать использовать ClientDataSet, чтобы прочитать данные и использовать их вообще без привязки к транзакции.

PS: чтобы детально описать принцип работы с Firebird потребуется отдельная статья.
Sign up to leave a comment.

Articles