Axapta 通过SQLDataReader.get_Item()检索值

Axapta 通过SQLDataReader.get_Item()检索值,axapta,dynamics-ax-2012,Axapta,Dynamics Ax 2012,我试图通过以下代码访问外部sql表。访问按预期工作,但如果数据类型必须为进一步处理而强制转换,则我在处理值时会遇到问题 以下代码可以在ax中作为作业执行: static void Job1(Args _args) { str serverName; str catalogName; str ConnectionString; str sqlQuery; System.Data.SqlClient.SqlConnectionStringBuilder co

我试图通过以下代码访问外部sql表。访问按预期工作,但如果数据类型必须为进一步处理而强制转换,则我在处理值时会遇到问题

以下代码可以在ax中作为作业执行:

static void Job1(Args _args)
{
    str serverName;
    str catalogName;
    str ConnectionString;
    str sqlQuery;

    System.Data.SqlClient.SqlConnectionStringBuilder connectionStringBuilder;
    System.Data.SqlClient.SqlConnection connection;
    System.Data.SqlClient.SqlCommand command;
    System.Data.SqlClient.SqlParameterCollection parameterCollection;
    System.Data.SqlClient.SqlDataReader dataReader;
    ;
    new InteropPermission( InteropKind::ClrInterop ).assert();

    sqlQuery = "SELECT TOP 10 * FROM PRODROUTE";

    serverName = SysSQLSystemInfo::construct().getLoginServer();
    catalogName = SysSQLSystemInfo::construct().getloginDatabase();
    connectionStringBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder();
    connectionStringBuilder.set_DataSource(serverName);

    connectionStringBuilder.set_IntegratedSecurity(true);
    connectionStringBuilder.set_InitialCatalog(catalogName);
    ConnectionString = connectionStringBuilder.get_ConnectionString();

    connection = new System.Data.SqlClient.SqlConnection(ConnectionString);
    command = new System.Data.SqlClient.SqlCommand(sqlQuery);
    command.set_Connection(connection);

    try
    {
        connection.Open();
        try
        {
            dataReader = command.ExecuteReader();

            while(dataReader.Read())
            {
                //info( dataReader.get_Item( "PRODID" )); // ok
                //info( dataReader.get_Item( "LEVEL" )); // not working
                info ( int2str( dataReader.GetInt32( 23 ))); // not working
                //info( any2str(dataReader.get_Item( "LEVEL" ))); // not working
            }
            dataReader.Dispose();
        }
        catch 
        {
            dataReader.Dispose();
        }
        catch(Exception::CLRError)
        {
            dataReader.Dispose();
        }
        connection.Dispose();
    }
    catch
    {
        connection.Dispose();
    }
    catch(Exception::CLRError)
    {
        connection.Dispose();
    }
    command.Dispose();
    CodeAccessPermission::revertAssert();
}
有四条代码线可以访问数据:

//info( dataReader.get_Item( "PRODID" )); // ok
//info( dataReader.get_Item( "LEVEL" )); // not working
info ( int2str( dataReader.GetInt32( 23 ))); // not working
//info( any2str(dataReader.get_Item( "LEVEL" ))); // not working
如您所见,只有一行不会抛出错误,因为字段的数据类型适合所需的操作。信息记录只是一个例子。如果我尝试将数据分配给ax表字段,同样的问题也会发生。 通过
int2str()
any2str()
等进行强制转换也不起作用

那么,为了进一步处理数据,正确的方法是什么呢

@编辑:ErrorMsg


Fehler während der Verarbeitung:Elementtyp für Variablenzuweisung ungültig。

我刚刚尝试直接在SSMS中运行您的查询,发现sql server上的实际表中不存在字段级别,但有一个名为“LEVEL_2;”的字段(这是我表中的第三个字段)

此外,这里还讨论了any2str没有做您期望它做的事情,但我认为这不是您检索级别字段的问题。

您得到的错误是什么?是
dataReader.get_Item(“LEVEL”)
没有得到数据,或者是将其作为参数传递给
info()
告诉您它不是字符串?当然,我得到的是数据。我编辑了OQ并添加了错误日志。你说得对。我选择了这个领域进行测试,这似乎是我的幸运之举。。。不有趣的是,它在AOT中被命名为“级别”,没有下划线。添加下划线使其工作正常。谢谢你的提示!在错误的位置调试:/