我在尝试使用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用户名和密码,但这种方法不存在。
我怎样才能使它有效?
答案 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';
。
答案 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不起作用