Формат строки подключения Odbc, не находит файлы - PullRequest
4 голосов
/ 17 ноября 2011

Это своего рода «двойной» вопрос, на который может быть один ответ.

Я работаю с соединением Odbc с AS / 400 со следующей строкой соединения:

driver={iSeries Access ODBC Driver}; system={0}; uid={1}; pwd={2}; DefaultLibraries=*USRLIBL;    

Я могу нормально подключиться к системе.

* USRLIBL содержит все необходимые библиотеки от пользователя (который имеет тип «только API» и имеет доступ ко всем пользовательским библиотекам).

Однако, когда я пытаюсь получить доступ к определенным библиотекам ERP, он говорит, что они не могут быть найдены, в то время как другие могут.

Итак, как чрезвычайно простое прохождение:

1. Open Connection - Query File 1 from Library A:  OK! - Close Connection
2. Open Connection - Query File 2 from Library A:  OK! - Close Connection
3. Open Connection - Query File 1 from Library B:  Exception  SQL0204 - in UserName type *FILE not found 

Хорошо, поэтому я добавил в определенную библиотеку, в которой будут находиться файлы ERP, сделав строку подключения следующим образом, просто чтобы протестировать программу:

driver={iSeries Access ODBC Driver}; system={0}; uid={1}; pwd={2}; DefaultLibraries=*USRLIBL, LibraryB; 

Но потом у меня начинает появляться другая проблема (еще одно чрезвычайно простое прохождение)

1. Open Connection - Query File 1 from Library A:  OK! - Close Connection
2. Open Connection - Query File 2 from Library A:  OK! - Close Connection
3. Open Connection - Query File 1 from Library B:  OK! - Close Connection
4. Open Connection - Query File 1 from Library A again:  Exception SQL0202 - in LibraryB type *FILE not found.  

Итак, мои вопросы:

Почему строка подключения odbc DefaultLibraries = * USRLIBL не возвращает правильные библиотеки? (Примечание: я также проверил это, используя iDB2Connection, который на самом деле работает нормально ... однако, iDB2Connection не может быть развернут, поскольку он буквально приводит к сбою сервера)

Почему во втором пошаговом руководстве возникает исключение, просто кажется, что он пропускает * USRLIBL после прочтения из LibraryB хотя бы один раз.

Есть мысли?

Начало редактирования:

На самом деле есть два пользователя, DEV и PROD

* USRLIBL получает все необходимые библиотеки из самой среды, поэтому, если при открытии соединения он обнаруживает среду локального хоста или что-либо небезопасное (плюс несколько других предупреждений), он по умолчанию использует учетные данные для входа в систему DEV перед созданием соединения . Вот почему system, uid и pwd обозначены как параметры в соединении (а не только как заполнители, которые используют стековый поток I-dont-want-to-do-out-data)

Затем * USRLIBL извлекает необходимые библиотеки у пользователя API.

Проясним, что способ его настройки работает с использованием iDB2 Connector, но из-за ограничений нашей системы ERP (мы думаем), использование ее с сервером IIS 7 вызывает катастрофический сбой, поэтому мы работаем с разъем ODBC.

Конец редактирования:

Ответы [ 3 ]

3 голосов
/ 06 ноября 2012

Если кто-то сталкивается с этим сообщением и использует провайдера данных IBM.Data.DB2.iSeries .NET, как я, ключевой момент, взятый выше, заключался в использовании naming=1 и не указании «Коллекции по умолчанию».Я наконец-то добился успеха при использовании следующей части в моей строке подключения

LibraryList= MyLibrary1,MyLibrary2,MyLibrary3,MyLibrary4;naming=1;
3 голосов
/ 17 ноября 2011

Вы можете квалифицировать имена таблиц как library.filename и не сталкиваться с какими-либо проблемами со списком библиотек.

Для получения дополнительной информации:

Клиентский доступ ODBC: настройка библиотек по умолчанию

Ключевые слова строки подключения ODBC


Выдержки из соответствующих частей:

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

...

В соответствии с соглашением об именах SYS неквалифицированные операторы SQL переходят в коллекцию по умолчанию. Если коллекции по умолчанию нет, используется текущая библиотека. Если текущая библиотека не указана, используется список библиотек.

...

Коллекция по умолчанию

Атрибут задания, установленный ODBC, который определяет библиотеку, используемую при обработке операторов SQL, содержащих неквалифицированные имена SQL. Если задана коллекция по умолчанию, все неквалифицированные объекты, кроме процедур, функций и типов, должны находиться в коллекции по умолчанию независимо от соглашения об именах.

...

Как получить ODBC для поиска в списке библиотек?

Как объяснено выше, отредактируйте источник данных ODBC и задайте для системного имени SYS. Библиотека по умолчанию должна быть пустой, или в версиях старше R510 настройка библиотек по умолчанию должна начинаться с запятой, чтобы коллекция по умолчанию не определялась (например, ", MYLIB1, MYLIB2").


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

driver={iSeries Access ODBC Driver}; system={0}; uid={1}; pwd={2}; naming=1; DefaultLibraries=,*USRLIBL,LibraryB;

0 голосов
/ 18 ноября 2011

Альтернативой является создание отдельного профиля пользователя для каждой среды.Поскольку * USRLIBL устанавливается описанием работы, это также повлечет за собой настройку отдельного описания работы.Например:

пользователь: веб-задание: список веб-библиотеки: CUSTPROD, ITEMPROD, UTILITY

пользователь: задание WEBTEST: список библиотеки WEBTEST: CUSTTEST, ITEMTEST, UTILITY

Код C # не изменяется, за исключением использования идентификатора тестового или производственного пользователя для аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...