1

有没有办法从 AX2012R2 获取到(外部)表的 ODBC 连接,而不在 ODBC 连接中使用 DSN?

它在 2009 年运行良好,类似于

systemInfo = SysSQLSystemInfo::construct();

loginProperty = new LoginProperty();

loginProperty.setServer(systemInfo.getLoginServer());
loginProperty.setDatabase(systemInfo.getloginDatabase());

conString = strFmt( 'Driver={SQL Server Native Client 10.0};'
                    + 'Server=%1;'
                    + 'Database=%2;'
                    , systemInfo.getLoginServer()
                    , systemInfo.getloginDatabase()
                    );

if ( <someFunctionToCheckForTrusedConnectin> )
{
   conString += '"Trusted_Connection=Yes;"';
}
else
{
    conString += strFmt( '"id=%1;'
                        + 'pwd=%2;"'
                        , _userName
                        , _passWord
                        );
}

loginProperty.setOther( conString );

try
{
    odbc = new OdbcConnection( loginProperty);
}
catch
{
    throw error(#DatabaseConnectionError);
}

但它在 2012 年引发了错误:

Objekt 'OdbcConnection' konnte nicht erstellt werden.
[Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben

我已经用谷歌搜索了几个小时(可能是几天..),但还没有找到任何可行的例子。

编辑:

如果我修改以下两行代码

loginProperty.setServer(systemInfo.getLoginServer());
loginProperty.setDatabase(systemInfo.getloginDatabase());

并以纯文本形式输入服务器/数据库,乍一看似乎可以工作,没关系,如果我输入了无效的用户名和/或密码。

4

2 回答 2

0

我们所有的接口都使用它并且它工作,我们将我们的连接参数,即数据库名称和数据库服务器名称存储在一个表中,注意 DSN 被注释掉,所以没有必要

loginProperty = new LoginProperty();
loginProperty.setServer(ImportJournalParameters.ExternalServerName);
// loginProperty.setDSN("ServerSQL10");
loginProperty.setDatabase(ImportJournalParameters.ExternalDBName);
connection = new OdbcConnection(loginProperty);
info('Login Process Successful - connection established');
于 2014-07-29T12:54:49.123 回答
0

为什么不制作系统或用户 DSN?

这将为连接建立驱动程序。您不需要指定服务器或数据库。

于 2013-12-03T18:24:17.457 回答