25.09.2013, 14:20 | #1 |
Участник
|
ODBCConnection и LoginProperty в DAX2012
Прошу помощи по программному подключению через ODBC из AX2012. C аутентификацией SQL а не Windows.
Пытаюсь подключаться следующим образом: X++: LPSrc = new LoginProperty(); LPSrc.setDSN(tbl.DSN); if (tbl.UsrPwd == NoYes::Yes) { // Так тоже не подключается, точнее тоже пытается под пользователем домена /*sConnection = strfmt('Driver={SQL Server Native Client 11.0};'+ 'Server=servername;'+ 'Database=db_name;'+ 'MultiSubnetFailover=No;'+ 'Trusted_Connection=No;'+ 'Uid=%1;Pwd=%2', tbl.Usr, tbl.Pwd);*/ sConnection = strfmt("MultiSubnetFailover=No;"+ "Trusted_Connection=No;"+ "DSN=%1;"+ "Uid=%2;"+ "Pwd=%3", tbl.DSN, tbl.Usr, tbl.Pwd); LPSrc.setOther(sConnection); } CSrc = new OdbcConnection(LPSrc); // вот здесь ругается что не может подключиться под пользователем domain\user Куда рыть? Что делаю не так? Из Windows по настроенному DSN проверка подключения проходит успешно, с аутентификацией SQL. |
|
25.09.2013, 14:43 | #2 |
NavAx
|
А на сервере разрешена аутентификация SQL?
|
|
25.09.2013, 14:45 | #3 |
Участник
|
__________________
// no comments |
|
25.09.2013, 14:49 | #4 |
Участник
|
|
|
25.09.2013, 14:57 | #5 |
Участник
|
DSN настроен на клиенте, код тоже выполняется на клиенте?
попробуйте классический пример: X++: LoginProperty loginProperty; OdbcConnection odbcConnection; ; // Set the information on the ODBC. loginProperty = new LoginProperty(); loginProperty.setDSN("dsnName"); loginProperty.setDatabase("databaseName"); //Create a connection to external database. odbcConnection = new OdbcConnection(loginProperty); Последний раз редактировалось handy-comp; 25.09.2013 в 15:01. |
|
25.09.2013, 15:02 | #6 |
Участник
|
|
|
25.09.2013, 15:10 | #7 |
Участник
|
|
|
25.09.2013, 15:13 | #8 |
Участник
|
|
|
25.09.2013, 15:25 | #9 |
Участник
|
Цитата:
Плюс в коде в строке подключения: X++: sConnection = strfmt("MultiSubnetFailover=No;"+ "Trusted_Connection=No;"+ // Аут. SQL "DSN=%1;"+ "Uid=%2;"+ // пользователь "Pwd=%3", // пароль tbl.DSN, tbl.Usr, tbl.Pwd); |
|
25.09.2013, 15:29 | #10 |
Участник
|
Решил проблему
На АОС-е настроили DSN для 64 и 32 версий (Win. Serv 64 используется)
Класс перевел в серверный. Все заработало. Спасибо всем за ответы. |
|
25.09.2013, 15:56 | #11 |
Участник
|
Что заработало конечно хорошо, только так и не понял почему если в настройках DSN прямо указано использовать SQL проверку и настроены логи пароль, у вас все равно использовалась Windows аутентификация.
|
|
26.09.2013, 10:05 | #12 |
Участник
|
|
|
02.02.2015, 15:19 | #13 |
Участник
|
Вопрос по соединению с PostgreSQL
Добрый день!
Ах2012R2 Подключаюсь к БД PostgreSQL через ODBCConnection: X++: server static void main(Args _args) { OdbcConnection connection; LoginProperty login; ; login = new LoginProperty(); login.setDSN('PostgreSQL-Test'); connection = new OdbcConnection(login); if (!connection) { checkFailed("Ошибка при создании соединения"); } } Соединение устанавливается и запросы работают, но при вызове new OdbcConnection(login) выдается сообщение об ошибке: Код: Невозможно выполнить требуемую операцию с базой данных. База данных SQL обнаружила ошибку. ERROR: syntax error at or near "@"; Error while executing the query. The SQL statement was: "declare @CONTEXT_INFO varbinary(128); select @CONTEXT_INFO = CAST (' kird 56 ODBC - read-only 0' as varbinary(128) );set CONTEXT_INFO @CONTEXT_INFO" Косметически можно вырезать лишние инфо, процедура работает, запросы отправляются, результаты обрабатываются. Но хотелось бы как-то дать понять, что не надо устанавливать CONTEXT_INFO. Может, с помощью connectionString или каким-либо другим способом. P.S. На клиенте при использовании 32-ти разрядного драйвера ODBC такой ошибки нет. |
|
02.02.2015, 18:16 | #14 |
Участник
|
Переделал на System.Data.Odbc объекты (AX 2012 R3 доступ к MySQL). Ошибки нет.
|
|
02.02.2015, 18:20 | #15 |
Читатель
|
Connection context
Цитата:
Сообщение от Denicce
Код: Невозможно выполнить требуемую операцию с базой данных. База данных SQL обнаружила ошибку. ERROR: syntax error at or near "@"; Error while executing the query. The SQL statement was: "declare @CONTEXT_INFO varbinary(128); select @CONTEXT_INFO = CAST (' kird 56 ODBC - read-only 0' as varbinary(128) );set CONTEXT_INFO @CONTEXT_INFO" |
|
|
За это сообщение автора поблагодарили: Denicce (2). |
03.02.2015, 08:31 | #16 |
Модератор
|
> Есть подозрение, что это из-за включенного контекста соединения
Так и есть
__________________
-ТСЯ или -ТЬСЯ ? |
|
09.06.2015, 10:57 | #17 |
Модератор
|
Цитата:
Цитата:
Resolution
Problem was escalated to escalation engineers where we confirmed the behavior of the application. In AX 4.0 for the LoginProperty class, we had two properties on this class – setUsername & setPassword – these were the properties you used if you wanted to change the login, see link below… http://msdn.microsoft.com/en-us/libr...(v=ax.10).aspx In AX 2009 onwards, these were removed for security reasons – see link below, they setUsername and setPassword are no longer valid properties. http://msdn.microsoft.com/en-us/libr...(v=ax.50).aspx I have looked at the kernel code, and in AX 4.0 and before if you specified the setUsername and setPassword then the kernel would use these to create the ODBC connection. If they were not specified, then they would use the login for the AX AOS service (or with AX 3.0 or before the client login in two tier mode). So as it is no longer possible to set these properties from AX 2009 onwards, the kernel will always use the login for the AOS service. So even if you try and set these in the “setOther” property on the LoginProperty class, they are ignored as in the connection string we create in the kernel code is always using trusted authentication of the AOS Service account – so these additional properties are ignored.
__________________
-ТСЯ или -ТЬСЯ ? |
|