Oracle Data Provider for .NET

Negli ultimi tempi mi è capitato spesso di lavorare su applicazioni che utilizzano Oracle come database piuttosto che Sql Server e, naturalmente, ho dovuto utilizzare nello strato di accesso ai dati le classi specifiche di Oracle, meglio note come Oracle Data Provider for .NET. Utilizzare queste classi significa avere a che fare con oggetti tipici di Oracle, es. gli Oracle data type, o i cursori utilizzati per contenere i resultset derivanti da una chiamata ad una store procedure, ecc.

Non avendo una esperienza significativa in Oracle ho sempre pensato che il supporto per .NET fosse alquanto limitato e ridotto all’essenziale,  es.  aprire una connessione ed eseguire un comando SQL che ritorna un resultset.  Ma noto con piacere che mi sbagliavo. La versione 11.1.0.6.20 dell’ODP for .NET fornisce sia una integrazione con l’ambiente Visual Studio  in versione 2005/2008, es. Server Explorer, wizards e designer, sia una integrazione con la piattaforma ASP .NET. Quest’ultima per me è la più interessante in quanto è possibile utilizzare alcuni providers  (argomento di cui ho già parlato in un mio articolo apparso sul sito dello user group DotNetSide) ed utilizzare come repository un database Oracle. Nello specifico i providers sono i seguenti:

  • Memberhip (gestione degli utenti e validazione)
  • Role (ruoli)
  • SiteMap (mappa del sito)
  • SessionState (  la Sessione di una applicazione ASP .NET )
  • Profile (profili degli utenti)
  • Web Event (informazioni circa lo “stato di salute” delle applicazione ASP .NET)
  • Web Part personalization (chi lavora con le WebParts può ora memorizzare le informazioni di personalizzazione in un db Oracle)
  • Cache Dependency

Il supporto per il Cache Dependency Provider a mio avviso è il più interessante di tutti. Ho già avuto modo di utilizzare ed apprezzare questo meccanismo (invalidazione automatica di un oggetto in cache a fronte di modifiche apportate a resultset memorizzati in un database mediante il meccanismo di notifica) su applicazioni basate su database SqlServer. Sarà sicuramente interessante e produttivo poterlo utilizzare anche in quei contesti dove il database è Oracle.

Failed to open a table in Sql Profiler

Applicare un service pack è una operazione che andrebbe meditata un pò, almeno andrebbe fatta dopo aver letto quali sono le fix apportate e quali sono gli eventuali impatti. A volte un però l’applicazione di un service pack provoca che una qualche funzionalità smette di ….funzionare. A parte gli scherzi, applicando il service pack 4 a Sql Server 2000 diventa impossibile aprire un trace table con Sql Profiler a causa del seguente errore bloccante:

“Failed to open a table”.

Soluzione immediata ? Aprirlo con il profiler di Sql Server 2005.

Il tutto è ampiamente documentato in questo articolo della KB Microsoft 

xp_cmdshell, appunti di utilizzo

Non è un semplice tip, infatti sottintende parecchio di più. Sto parlando di come impedire ad una istanza di Sql Server di avviarsi utilizzando…..sql stesso, reperibile sul sito della community .netSide, e scritto da Francesco Quaratino, disponibile qui Per quanto possa sembrare a prima vista strano voler impedire ad una istanza di Sql di avviarsi, ritengo tuttavia plausibile uno scenario reale in cui questa situazione possa verificarsi. Ad esempio, potremmo utilizzare una istanza di Sql solo per motivi amministrativi, e quindi solo un DBA può usufruire del servizio, ma è comunque necessario garantire agli utenti un accesso amministrativo al PC per altri motivi; infatti, in questo scenario è necessario assicurarsi che l’utente amministratore, ma non DBA, non possa avviare l’istanza.

L’utilizzo della store xp_cmdshell, tuttavia, è disabilitato di default in Sql Server 2005 per motivi di sicurezza, come spiegato esaurientemente in questo post di Tara Kizer (un blog assolutamente da leggere per tutti gli aficionados di Sql); occorre quindi abilitarne prima l’uso attraverso “sp_configure” oppure utilizzando il tool Surface Area Configuration.

Ottimo tip e ottimo blog.

Data Scripter per Sql Server 2005

Scripting dei dati di una tabella di Sql Server 2005 mediante generazione automatica di istruzioni di insert. Questa funzionalità avrebbero a mio avviso dovuto includerla almeno già da un paio di versioni poichè in alcuni casi risulta davvero utile. Anzi, ricordo che durante consulenze passate qualche collega particolarmente devoto a Oracle trovava motivo di denigrare il dbengine di Microsoft a favore di Oracle solo perchè questa funzionalità era assente. Da quell’immenso repository di codice e documentazione che va sotto il nome di Code Project è possibile scaricare questo add-in per Sql Server 2005 Management Studio, che mette a disposizione una nuova voce di menù contestuale sull’item di una qualsiasi tabella permettendo di generare automaticamente le istruzioni di insert per tutte le righe o per un sottoinsieme di esse. L’add-in è  un assembly .NET 2.0 che si registra come componente COM e come add-in per SSMS. E’ disponibile al download sia la versione binaria che quella con i sorgenti (C#). Quest’ultima torna utile soprattutto come modello per creare altri add-in per SSMS.