在 AX Dynamics 365 中从 x++ 调用 SQL 过程

问题描述

我已经成功地使用参数调用了 x++ 类(ax dynamics 365)中的 sql 过程,但无法从 sql 过程中获取 x++ 类中的返回/输出值。 代码如下:

X++ 代码

Connection connection = new Connection();
Statement statement = connection.createStatement();
str sql;
ResultSet result; 
sqlStatementExecutePermission permission;
int64 value1 = 8;
str value2 = "War-001";
sql = strFmt('Exec [UpdateTimesheetRecord] \'%1\',\'%2\'',value1,value2 ); 
permission = new sqlStatementExecutePermission(sql);
permission.assert();
try
{
    result = statement.executeQuery(sql); 
}
catch
{ 
}
CodeAccesspermission::revertAssert();

sql 过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE UpdateTimesheetRecord
@Value1 INT,@Value2 VARCHAR(50)
AS
Begin Transaction 
UPDATE  WARHCMTIMESHEET
SET [STATUS] = @Value1  
Where TimesheetId = @Value2 
If @@ERROR <> 0 
    Begin
        RollBack Transaction 
        Return -1 
    End
Else
    Begin
        Commit Transaction
        Return @Value1
    End 
GO

解决方法

此代码用于从 sql 过程中获取结果集,如果您在 sql 过程中使用选择查询,但如果您在 sql 过程中更新记录并希望在 x++ 中获取返回值,它将不起作用:

Connection connection = new Connection();
Statement statement = connection.createStatement(); 
ResultSet result; str sql; int output; ResultSet testRS;
SqlStatementExecutePermission permission; 
sql = strFmt('Exec [GetAllTimesheet]'); 
permission = new SqlStatementExecutePermission(sql);
permission.assert();  
testRS = statement.executeQuery(sql);
while(testRS.next())
    {
        info(testRS.getString(2));
    } 

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...