【问题标题】:Call SQL procedure from x++ in AX Dynamics 365在 AX Dynamics 365 中从 x++ 调用 SQL 过程
【发布时间】:2021-06-14 10:25:05
【问题描述】:

我已成功调用带有参数的 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-server x++ dynamics-365


    【解决方案1】:

    此代码正在从 sql 过程中获取结果集,如果您在 sql 过程中使用 select 查询,但如果您在 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));
        } 
    

    【讨论】:

    • 欢迎来到 StackOverflow。除非这是对您问题的有效答案,否则您应该删除此回复并将其添加到您的问题中,而不是通过editing your question。允许回答您自己的问题,但这会将其从“未回答的问题”列表中删除。如果您确实想回答自己的问题,那么您也应该接受自己的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多