Sql Server

sp_who2, come organizzare i dati restituiti con utenze non amministrative

E' mai capitato di aver la necessità di visualizzare le connessioni attive su un determinato SQL Server via mmc o Query Analizer? A me si. Per far questo è necessario avviare la stored procedure sp_who2. Essendo una stored procedure di sistema non è possibile modificarla a patto di non avere credenziali di tipo amministrativo.  E questo è proprio quello che è sucecesso anche ad un mio collega ("Open" Skinny). Da grande appassionato di Transact SQL mi ha proposto una soluzione al problema davvero geniale. Query su tabella virtuale popolata dai dati provenienti dalla stored. CREATE TABLE #WHO2(SPID INT,Status VARCHAR(50),Login VARCHAR(100),HostName VARCHAR(255),BlkBy VARCHAR(100),DBName VARCHAR(100),Command VARCHAR(100),CPUTime FLOAT,DiskIO...

posted @ mercoledì 8 marzo 2006 12:28 | Feedback (5417)

Connection Pooling and the "Timeout Expired" Exception FAQ

System.InvalidOperationException: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.   This may have occurred because all pooled connections were in use and max pool size was reached. Lavorando con applicazioni che necessitano di effettuare diverse chiamate al DB, può accadere di incappare nella più classica System.InvalidOperationException. Ovvero.. TimeOutExpired.Prima di partire a cercare materiale su internet andate direttamente al blog di Angel Saenz-Badillos.Ha realizzato un'ottima FAQ proprio su questo argomento. Il link è questo ps = anche se pensate di essere dei code killers ne consiglio la lettura perchè ci sono molte cose da imparare.. specialmente sullo stato delle...

posted @ martedì 31 gennaio 2006 14:24 | Feedback (44)

Ottimizzare codice TSQL.

Per scrivere applicazioni performanti non è solo necessario scrivere del buon codice, ma è necessario prestare molta attenzione a come si lavora con le proprie banche dati. Per fare un count delle righe presenti in una tabella, il 90% dei programmatori utilizza: SELECT COUNT(*) from tabella Potrebbe sembrare corretto, ma non è proprio così.Quando si esegue questa query, il client invia al server una richiesta di piccolissime dimensioni. Il server riceve la richiesta ed effettua uno scan totale della tabella per determinare il totale delle righe in essa presenti. Per ogni riga viene effettuato un semplice calcolo basato su una addizione.. qualcosa di paragonabile ad un foreach. Questa...

posted @ mercoledì 28 settembre 2005 11:27 | Feedback (201)

Sfruttare il Pooling di connessioni

Il pooling delle connessioni rappresenta una funzionalità eccezionale di ADO.NET. Consente di riutilizzare in modo trasparante una connessione ad un database quando questa non è più necessaria all’applicazione.Il meccanismo funziona in questi termini: non appena si apre la prima connessione al database, viene creato un pool di connessioni identiche, in modo che le richieste seguenti non debbano aspettare di ottenere una connessione valida. Quando l’applicazione completa tutte le operazioni sul database, deve chiudere esplicitamente l’oggetto Connection per restituirlo al pool e renderlo disponibile ad altre applicazioni. ADO.NET crea un numero di pool di connessioni pari al numero di stringhe di...

posted @ lunedì 29 agosto 2005 11:57 | Feedback (29)

Gestire al meglio le eccezioni di Sql Server con ADO.NET

Utilizzare SqlException per ricevere informazioni dettagliate circa l’errore generato dal database. SqlException espone la collezione Errors che contiene più oggetti SqlError. Un SqlError può essere di diversi tipi:- Server : Ritorna il nome del database che ha generato l’errore- Procedure : Ritorna il nome della procedure che ha generato l’errore- LineNumber : Ritorna il numero della riga della stored o del batch TSQL che ha generato l’errore.- Number : Il codice di errore di SqlServer relativo all’errore scatenato. Il tipo Number è decisamente interessante perchè ci fornisce ulteriori informazioni relative all’errore. Un valore compreso tra 1 e 10 è un tipico...

posted @ lunedì 29 agosto 2005 11:36 | Feedback (32)