Gestire Oracle Express 10g da Visual Studio Express

Su una mia macchia virtuale ho installato e configurato Oracle Express 10g ed il driver nativo per .net.

Oracle Express si presenta molto ricco di documentazione e con una interfaccia di gestione “web” che a mio parere è facile ed intuitiva, pur non avendo una profonda conoscenza di Oracle (tra le mie velleità c’era anche quella di imparare bene l’utilizzo e ho comprato un manuale che ho solamente sfogliato senza approfondire) sono stato in grado di creare nuove tabelle, e gestire queste da Visual Studio Express.

La tabella che ho generato per la mia prova:

CREATE TABLE  "TABLEPROVA"
   (    "ID" NUMBER,
    "DESCRIZIONE" VARCHAR2(50),
    "VALORE" NUMBER(12,3),
     CONSTRAINT "TABLEPROVA_PK" PRIMARY KEY ("ID") ENABLE
   )
/

CREATE OR REPLACE TRIGGER  "BI_TABLEPROVA"
  before insert on "TABLEPROVA"              
  for each row 
begin  
    select "TABLEPROVA_SEQ".nextval into :NEW.ID from dual;
end;

/
ALTER TRIGGER  "BI_TABLEPROVA" ENABLE
/

(come si vede il campo ID è di tipo numerico con un trigger che incrementa di 1 automaticamente il valore ad ogni inserimento)

Vista l’impossibilità di Visual Studio Express a collegare ed utilizzare il wizard di creazione del dataset tipizzato con origine dati “Oracle”, è noto infatti che express gestisce solo Access, Sql Express, Sql CE sempre in locale.

Visto che non ho il wizard a disposizione (esiste, a dire il vero un’altra possibilità ma non l’ho scartata perchè la sua descrizione porterebbe via parecchio tempo) ho fatto io quello che dovrebbe fare il wizard di generazione del dataset.

Sostanzialmente fa le operazioni:

1) Apre la connessione con il database
2) Genera la definizione del dataset (xsd) prendendo dal database lo schema delle tabelle / campi
3) Predispone il TableMapping per il mapping degli oggetti che dovrà popolare
4) Gestisce la generazione di un “adapter” dedicato per ogni tabella (tableadapter)
5) Popola ciascun DataAdapter con i comandi / connessioni

Tutto a mano ( è meno difficile di quanto si possa pensare, una volta che si è imparato il trucco diventa tutto in discesa):

Sono partito da un progetto vuoto “windows forms”, ho aggiunto a questo (progetto, aggiungi, dataset) che è rappresentato da un file con estensione xsd.

Si apre la gestione del dataset, ho aggiunto una nuova tabella con 3 campi, tabella e campi sono “speculari” rispetto a tabella e campi presenti nel database.

Ho aggiunto un indice primario al datatable generato.

Aggiunto un oggetto di tipo BindingSource, impostato l’origine dati dal mio dataset appena generato.
Aggiunto un oggetto di tipo BindingNavigator, impostato la proprietà “BindingSource” sul BindingNavigator generato per il mio progetto.

Ho aggiunto un DataGridView con origine dati sul BindingSource e tanti campi di tipo textbox quanti campi presenti nella table, impostato su questi il binding (Text) con BindingSource.

Ho aggiunto il riferimento al driver di Oracle.

Passiamo al codice
A livello di modulo:
Imports Oracle.DataAccess.Client

A livello di classe:
Dim da As New OracleDataAdapter("SELECT * FROM tableprova", "Data Source=XP-TEST;User Id=xp-test;Password=xptest;")

Nell’evento Load della form:

Dim cm As New OracleCommandBuilder(da)

da.InsertCommand = cm.GetInsertCommand()
da.DeleteCommand = cm.GetDeleteCommand()
da.UpdateCommand = cm.GetUpdateCommand()
da.Fill(DbProva, "TableProva")

Visto che mancava il comando di aggiornamento del database ho provveduto ad aggiungere un bottone nel bindingnavigator, nel relativo evento click il codice:

BindingSource1.EndEdit()
da.Update(DbProva, "TableProva")



Esempio VB.NET
Esempio C#

Print | posted on sabato 19 febbraio 2011 22:23

Feedback

No comments posted yet.

Your comment:





 
Please add 4 and 3 and type the answer here:

Copyright © Luciano Bastianello

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski