Oggi non ho voglia di sprecare inutilmente oggetti ...
Quindi siccome devo creare una classe per accedere a dei dati su un sistema remoto di tipo AS400, ecco cosa mi è venuto in mente.

Per prima cosa mi serve una classe, che ho chiamato Mik_as400. Non sto qui a spiegare la logica della sintassi che uso.

Mi dichiaro qualche Fields che non fa mai male :

private String _connString;
private iDB2Connection dbConn;
private iDB2Command dbCmd;
private iDB2DataReader dbDr;
private iDB2DataAdapter dbDa;

Fatto cio', ho bisogno di un metodo che mi Costruisce la DataTable, perchè io non conosco i nomi dei campi della mia query ...

private DataTable get_Table(iDB2DataReader dr)
{
   DataTable dt = dr.GetSchemaTable();
   return dt;
}

In questa prima parte, utilizzo un DataReader speciale fornito dalla IBM per operare proprio sul nuovo sistema iSeries. Come potete notare, il metodo GetSchemaTable mi ritorna una DataTable costruita sulla base del DataReader e delle sue Fields ... Comodo no?

Adesso bisogna solamente creare un Loops che mentre legge il risultato del DataReader, popola la DataTable già propriamente costruita.

 //Mi connetto e scarico i dati
this.dbConn.Open();
this.dbDr = this.dbCmd.ExecuteReader(CommandBehavior.CloseConnection);
DataTable dt = this.get_Table(this.dbDr);
//Loop per popolare la DataTable
while (this.dbDr.Read())
{
   for (int x = 0; x < dt.Columns.Count; x++)
   {
      DataRow rw = dt.NewRow();
      rw[x] = this.dbDr[x].ToString();
      dt.Rows.Add(rw);
   }
}

Con questo è tutto.