没有Active Directory用户的{2012} ODBC连接

时间:2015-10-27 18:43:52

标签: axapta dynamics-ax-2012

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

我已经配置了dsn,我可以连接sql server身份验证(不是活动目录,因为在另一台服务器上),当我测试时,它只是工作。

但是当我尝试在x ++中使用dsn时,我正在向loginProperty发送正确的用户和密码,但总是返回错误,它会尝试使用活动目录用户。

这是我的代码:

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用户名和密码,但这种方法不存在。

我怎样才能使它有效?

2 个答案:

答案 0 :(得分:1)

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

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

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

请参阅此处https://msdn.microsoft.com/en-us/library/aa889472.aspx

答案 1 :(得分:0)

我无法使它与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不起作用