Simplex_ORM

Simplex_ORM è una libreria di classi che offre il servizio di gestione dell’interazione con il database di supporto all’applicazione.

Le classi raccolte nella libreria sono:

simplex_ORM.GenericObject Classe generica da cui derivano tutte le altre classi quali: – Columns; – Table; S
simplex_ORM.Column Classe che rappresenta una colonna di una tabella. S
simplex_ORM.Table Classe che rappresenta una tabella. S
simplex_ORM.Catalog Classe astratta che rappresenta il catalogo ad un database. Deve essere implementata una classe di questo tipo per ogni tecnologia Database. A
simplex_ORM.iLookupBrowser Interfaccia dell’oggetto LookupBrowser che consente di ottenere, data una chiave, il relativo valore. I
simplex_ORM.Spx_ORMMessage Messaggio per comunicare situazioni anomale. S
simplex_ORM.SQLSrv.SQLCatalog Implementazione di Catalog per la tecnologia MS SQL Server. D
simplex_ORM.SQLSrv.SQLColumn Implementazione di Column per la tecnologia MS SQL Server. D
simplex_ORM.SQLSrv.SQLTable Implementazione di Table per la tecnologia MS SQL Server. D
simplex_ORM.SQLSrv.SQLLookupBrowser Implementazione di SQLLookupBrowser per la tecnologia MS SQL Server. D
simplex_ORM.SQLForeignKey Classe che rappresenta un vincolo di integrità referenziale S 

Legenda

S Classe o Superclasse
D Classe derivata
I Interfaccia
A Classe astratta

La superclasse Catalog e le sue derivate conservano le connessioni con il catalogo del database e gestiscono la corrispondenza dei tipi .NET con i tipi di dati del database.

La superclasse Column e le sue derivare rappresentano una colonna di una tabella. Un oggetto di classe Column (o di una sua classe derivata)  effettua una lettura del catalogo per estrarre informazioni relative ad una data colonna di una data tabella. Tale oggetto, poi, usa le informazioni ricavate dal catalogo (es. nome, tipo di dato, se la colonna è chiave primaria, se ammette valori nulli, se è autoincrementante, se ha un valore di default, etc.) per accedere alle informazioni contenute in quella colonna nell’ambito di un particolare record della tabella data. La superclasse Column, inoltre, fornisce alcuni metodi di utilità statici e pubblici che consentono, tra le altre cose: di determinare il tipo di una stringa; di convertire una data in formato SQL-92 e viceversa.

La superclasse Table e le sue derivate rappresentano una tabella. Un oggetto di classe Table (o di una sua classe derivata), tuttavia, può contenere soltanto un record  alla volta di quella tabella. Al momento è stata implementata solo la classe SQLTable, che deriva dalla Table ma è specifica per il sistema MS SqlServer. La classe SQLTable presenta metodi per il caricamento di un record dal database (load()), per la modifica di un record (update(), save()), per la creazione di un record (insert(), save()), per la lettura dei valori delle colonne (getVaue()) del record, per l’aggiornamento dei valori delle colonne (setValue()) del record. Il metodo save() identifica automaticamente se un record debba essere creato o aggiornato. Nel primo caso invoca insert(), nel secondo invoca update(). Dalle versioni  successive alla v. 1.1.0.9 la classe SQLTable offre un metdo che consente di ottenere un valore stringa in corrispondenza di una colonna numerica che rappresenta una chiave verso una tabella di lookup o di decodifica: decodeColumn().

Referencing_Referenced_Tables

Ad esempio:

  1. Caricare il record Key:=1 della tabella Referencing.

simplex_ORM.SQLSrv.SQLTable _record = simplex_ORM.SQLSrv.SQLTable.createSQLTable(MyODBCConnection, “Referencing”);

_record.setValue(“ID”, “1”);

_record.load();

  1. Per ottenere il valore del campo “Field 3”

_record.getValue(“Field3”);

che è uguale a 2.

  1. Mentre per ottenere il corrispondente valore decodificato:

_record.decodeColumn(“Referencing”, “Referenced”);

che è uguale a “Text 1”.

L’esempio mostra un’altra particolarità della classe Table e delle sue derivate: non è possibile istanziarne un oggetto con l’operatore new ma si deve usare il metodo statico createObject() a cui passare due parametri: una connessione ODBC aperta ed il nome della tabella con cui l’oggetto ORM deve interagire.

La classe LookupBrowser e le sue derivate rappresentano un meccanismo veloce per consultare una tabella come se fosse una hash table. Questo oggetto si crea a partire da un’istanza della classe Table da consultare, specificando la colonna che rappresenta il campo chiave e la colonna che rappresenta il campo valore. Richiamando quindi il metodo getValue() specificando la chiave si ottiene il corrispondente valore.

Data la seguente tabella, si mostri il contenuto dei primi 10 record col seguente frammento di codice:

LookupTable_WITHOUT_BORDERS

public static void Main(string[] args)

{
           testLookupBrowser();

}

public static void testLookupBrowser()
{
           String MyConnStr = null; <<<<<<<<<<<<<<
           String MyTabName = null;
           SQLTable _MyTable;
           SQLLookupBrowser _lkp = null;
           System.Data.Odbc.OdbcConnection _conn = null;
           MyConnStr = MyConnStr = “Driver={SQL Native Client};Server=UTENTE-PC\\SQLEXPRESS;Trusted_Connection=No;Database=Naponos;Uid=******;Pwd=******“;
           MyTabName = “LK_STATO”;
// apertura – opening

              _conn = new OdbcConnection(MyConnStr);
              _conn.Open();

         // istanziamento dell’oggetto ORM corrispondente ad LK_STATO

           _MyTable = simplex_ORM.SQLSrv.SQLTable.createSQLTable(_conn, MyTabName);

 // creazione del lookupBrowser

            _lkp = _MyTable.getLookupBrowser(“STATO”, “DESCRIZIONE”);

           if (_lkp != null)
           {
               for (int _t = 0; _t < 10; _t++ )
               {
                   System.Console.Out.WriteLine(“Alla chiave: ” +  _t + “ corrisponde la descrizone: ” + _lkp.getValue(_t));
               }
           }
           _conn.Close();
       }

Il risultato dell’elaborazione è il seguente.

SIMPLEX_ORM_TEST

Come si vede per le chiavi mancanti il metodo non ha risposto con una eccezione ma ha restituito un valore null.

La classe ForeignKey e le sue derivate, infine, forniscono oggetti che semplicemente consentono di ottenere informazioni sui vincoli di integrità referenziale tra due tabelle a tempo di esecuzione. Di seguito un esempio:

try

{
   MyCat = new SQLCatalog(MyConnStr);
    MyCat.openCatalog();
    MyTable = MyCat.createTable(MyTabName);  
    MyFK = MyTable.getForeignKey(MyColumnName);

    if (MyFK == null)
              System.Console.Out.WriteLine(“La colonna non ha vincoli”);
    else
     {
      System.Console.Out.WriteLine(“La colonna HA il vincolo ” + MyFK.ConstraintName + “ di ” + MyFK.ColumnsCount + ” colonne.“);
     }
     System.Console.Out.WriteLine(“— DESCRIZIONE —-“);
     if (MyFK != null)
      {
          for (int t = 0; t < MyFK.ColumnsCount; t++)
           {
               System.Console.Out.WriteLine(“La colonna ” + MyFK.ReferencingTable.Name + “.” + MyFK.ReferencingColumns[t] + “ fa riferimento a –> ” + MyFK.ReferencedTable.Name + “.” + MyFK.ReferencedColumns[t]);
           }
      }
      else
           {
               System.Console.Out.WriteLine(“— NESSUN VINCOLO —-“);
           }
       }
catch (Spx_ORMMessage E)
       {
        System.Console.Out.WriteLine(E.ToString());
        ToInsert = true;
       }
System.Console.Out.WriteLine(“ — END — : ” + DateTime.Now.ToString());

Lascia un commento