Pass DATASET and DATASET-HANDLE parameters
- Last Updated: February 11, 2026
- 3 minute read
- OpenEdge
- Version 13.0
- Documentation
This section describes mapping ABL ProDataSets to ADO.NET DataSets, using the
DATASET and DATASET-HANDLE
parameters.
ABL procedures can pass DATASET or DATASET-HANDLE parameters to an application server. This is a
convenient and efficient way to pass relational data between the client and the application
server code. The .NET Open Client environment provides the same capability using an ADO.NET
DataSet. A .NET Open Client passes an ABL DATASET parameter
using an ADO.NET strongly typed DataSet object that is generated by ProxyGen and mapped to the
specified ProDataSet. This strongly typed DataSet object inherits from Progress.Open4GL.ProDataSet, which in turn inherits from the standard ADO.NET
System.Data.DataSet class.
DATASET-HANDLE parameters allow the transfer of dynamic
ProDataSets between Open Clients and the application server, without requiring a complete,
static definition of the ProDataSet on each side of the transfer (as with DATASET parameters). A .NET Open Client passes an ABL DATASET-HANDLE parameter using an ADO.NET DataSet object, System.Data.DataSet.
For each unique static ProDataSet (DATASET
parameter), ProxyGen generates a strongly typed DataSet class, TypedDataSet.cs. TypedDataSet is the name of the static ProDataSet in the ABL procedure, appended
with DataSet. When comparing the static definitions of two
ProDataSets, the name of the ProDataSet and the member buffers do not need to match for the
ProDataSets to map to a single ADO.NET DataSet. However, field names, types, and indexes do need to match. (This differs from ABL in which field names and
indexes do not need to match.) For example, in a procedure with a
static ProDataSet CustOrderDS, TypedDataSet is CustOrderDSDataSet. Each
temp-table in the ProDataSet is created as a DataTable within the DataSet class. If other
ProDataSet parameters in other methods in the proxy share the same schema, ProxyGen does not
create additional strongly typed DataSet classes but uses the same strongly typed DataSet
class for these methods. The name of the ProDataSet parameter does not matter when comparing
the schema of ProDataSet parameters.
Also, if ProxyGen detects two or more ProDataSet parameters with the same
name but different schemas, ProxyGen creates multiple strongly typed DataSet classes, one for
each unique schema. ProxyGen appends a unique number to the end of the DataSet name, to create
unique class names. For example, if multiple procedures define a static ProDataSet CustOrderDS, each with a different schema, TypedDataSet can be CustOrderDSDataSet, CustOrderDS2DataSet, and so on.
All strongly typed DataSet classes are defined in the following namespace:
|
Where namespace is the General namespace you optionally entered in the .NET Client Details group of the ProxyGen Generate Proxies dialog box. (See Namespace for proxy objects.)
This section covers the following topics:
- Static and dynamic ProDataSets.
- Data-type mapping for ProDataSets.
- Pass a DATASET or DATASET-HANDLE as an INPUT parameter.
- Provide ABL extensions for INPUT DATASET-HANDLE parameters.
- Pass a DATASET or DATASET-HANDLE as an INPUT-OUTPUT parameter.
- Pass a DATASET or DATASET-HANDLE as an OUTPUT parameter.
- Update a DataSet.
- ProDataSet examples.