Axapta 没有Active Directory用户的AX 2012 ODBC连接

Axapta 没有Active Directory用户的AX 2012 ODBC连接,axapta,dynamics-ax-2012,Axapta,Dynamics Ax 2012,我在尝试使用Microsoft Dynamics AX连接到外部数据库时遇到问题 我已经配置了dsn,并且可以连接sql server身份验证(不是active directory,因为它位于另一台服务器中),当我进行测试时,它就可以正常工作 但是,当我尝试在x++中使用dsn时,我会向loginProperty发送正确的用户和密码,但总是返回错误,这与active directory用户有关 这是我的代码: LoginProperty loginProper

我在尝试使用Microsoft Dynamics AX连接到外部数据库时遇到问题

我已经配置了dsn,并且可以连接sql server身份验证(不是active directory,因为它位于另一台服务器中),当我进行测试时,它就可以正常工作

但是,当我尝试在x++中使用dsn时,我会向loginProperty发送正确的用户和密码,但总是返回错误,这与active directory用户有关

这是我的代码:

LoginProperty                   loginProperty;
OdbcConnection                  odbcConnection;
Statement                       statement;
ResultSet                       resultSet;
str                             sql, criteria;
SqlStatementExecutePermission   perm;
TLExternalUser                  tlExternaUser;
TLExternalUserPwd               tlExternalUserPwd;
str                             strConnectionString;
str                             dsn         = "myDsnName";
str                             dsnUser     = "sqlUser";
str                             dsnUSerPwd  = "sqlPWD";

strConnectionString = strfmt("UID=%1;PWD=%2",dsnUser,dsnUSerPwd);
loginProperty = new LoginProperty();
loginProperty.setDSN(dsn);
loginProperty.setDatabase("MyDatabase");
loginProperty.setOther(strConnectionString);
   odbcConnection = new OdbcConnection(loginProperty);

if (odbcConnection)
{
    info("success");
}
else
{
    throw error("Failed to log on to the database through ODBC.");
}
但我得到了这个错误:

[Microsoft][SQL Server Native Client 10.0][SQL Server]Login failed for user 'DOMAIN\ACTIVEDIRECTORYUSER'.
我试图直接将用户名和密码传递给我的登录属性,但这种方法并不存在


如何使其工作?

尝试将其更改为此并删除
loginProperty.setDSN(…)

编辑如果密码中有特殊字符,则需要使用反斜杠
\
对其进行转义,或在引号前放置
@
符号以指示字符串文字,如
str myPass=@'MyP@ssw0rd';


请参见此处

我无法使其与dsn一起工作,因此我使用服务器,方式如下:

LoginProperty                   loginProperty;
OdbcConnection                  odbcConnection;
Statement                       statement;
ResultSet                       resultSet;
str                             sql ;
SqlStatementExecutePermission   perm;
TLExternalUser                  tlExternaUser;
TLExternalUserPwd               tlExternalUserPwd;
str                             strConnectionString;
str                             dbServer    = 'myipServer';
str                             serverDbUser     = 'myUser';
str                             serverDbUserPwd  = 'MyPassword';

strConnectionString = strfmt("UID=%1;PWD=%2",serverDbUser,serverDbUserPwd);

loginProperty = new LoginProperty();

loginProperty.setServer(dbServer);
loginProperty.setDatabase("MyDatabase");
loginProperty.setOther(strConnectionString);

odbcConnection = new OdbcConnection(loginProperty);

我不明白为什么dsn不起作用

您确定用户/通行证正确吗?字符串中是否有需要转义的特殊字符?请尝试像
@'MyPassword'
那样放置密码。查看我的答案编辑。我确信我发送了正确的凭据。我尝试以这种方式传递密码,但不起作用。您没有按照我的建议更改连接字符串<代码>“DSN=%1;UID=%2;PWD=%3”,DSN,DSUSER,dsnUSerPwd
。它在我的测试中起作用了吗?您是否正确设置了DSN?嗯,我按照您的建议进行了尝试,同样的问题是,使用DSN dit不起作用,我当然正确设置了DSN,但它总是尝试使用active directory凭据连接,而不是自定义用户。在服务器上工作,我不在密码中使用外挂字符,因为我不包含,但是我会考虑稍后加入。
LoginProperty                   loginProperty;
OdbcConnection                  odbcConnection;
Statement                       statement;
ResultSet                       resultSet;
str                             sql ;
SqlStatementExecutePermission   perm;
TLExternalUser                  tlExternaUser;
TLExternalUserPwd               tlExternalUserPwd;
str                             strConnectionString;
str                             dbServer    = 'myipServer';
str                             serverDbUser     = 'myUser';
str                             serverDbUserPwd  = 'MyPassword';

strConnectionString = strfmt("UID=%1;PWD=%2",serverDbUser,serverDbUserPwd);

loginProperty = new LoginProperty();

loginProperty.setServer(dbServer);
loginProperty.setDatabase("MyDatabase");
loginProperty.setOther(strConnectionString);

odbcConnection = new OdbcConnection(loginProperty);