0

我正在尝试通过以下代码访问外部 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-table-fields,则会出现同样的问题。投射 viaint2str()any2str()也不起作用。

那么处理数据读取以进行进一步处理的正确方法是什么?

@edit:错误消息

Fehler während der Verarbeitung: E​​lementtyp für Variablenzuweisung ungültig。

4

1 回答 1

1

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

此外,这谈到 any2str 没有做你期望它做的事情,但我认为这不是你检索 LEVEL 字段的问题。 http://abraaxapta.blogspot.com/2012/02/kernel-function-madness-any2str.html

于 2013-01-10T16:45:13.137 回答