微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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));
    } 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。