如何解决在 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 举报,一经查实,本站将立刻删除。