Hi all,
While upgrading a legacy application from PB17R3 to PB2022R3 I run into a reproducible issue with calling an MSSQL stored procedure which has an integer output parameter.
The issue is that when the proc's output parameter is null, PB17R3 correctly returns null whereas with PB2022R3 I get 0.
DBMS: SQL Server 2016.
* PB17R3 using ADO.Net 4
DBParm: Namespace='System.Data.SqlClient',DataSource='MYSERVER',Database='MYDB',PROVIDERSTRING='Encrypt=true;TrustServerCertificate=false;App='MyApp',DefaultProcOwner='dbo',CommitOnDisconnect='No',Isolation='Read Committed',DelimitIdentifier='Yes',TrimSpaces=1,OJSyntax='ANSI',DisableBind=0,TrustedConnection=1
* PB2022R3 using ADO.Net 6
DBParm: Namespace='System.Data.SqlClient',Provider='SQL Server',DefaultProcOwner='dbo',DataSource='MYSERVER',Database='MYDB',PROVIDERSTRING='Integrated Security=true;Encrypt=true;Trust Server Certificate=true;App=MyApp',DefaultProcOwner='dbo',CommitOnDisconnect='No',Isolation='Read Committed',DelimitIdentifier='Yes',TrimSpaces=1,OJSyntax='ANSI',DisableBind=0
I can reproduce with the procedure simplified to:
create procedure dbo.FR_returnNull @ID int output
as
select @ID = null
go
In Powerbuilder, the procedure is mapped as:
PUBLIC:
subroutine FR_returnNull(REF long ID) rpcfunc alias for "dbo.FR_returnNull"
In PB we call the procedure with:
long ll_ID = 8
SQLCA.FR_returnNull(REF ll_ID)
Results:
Correct: PB17R3: after calling the proc, ll_ID == NULL
Incorrect: PB2022R3 after calling the proc ll_ID = 0
To be sure when I change the stored procedure to select @ID = 5, both PB17 as 2022 return the correct result.
I'm a bit at a loss.
1. There is a difference with ADO versions. Can this be caused by ADO 6. Am I missing some configuration parameter?
2. Or is this changed behaviour somewhere between PB17R3 and PB2022R3
Any idea?
Thanks in advance,
Erwin