问题描述
我已经成功地使用参数调用了 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));
}