Wednesday, January 30, 2008

Distinct DataTable

. Wednesday, January 30, 2008
0 commenti

Distinct è la clausola che ci permette di eliminare ripetizioni dai risultati di una select.
Nativamente nel Framework 1.x non esiste un metodo che ci permetta di fare una Distinct su un oggetto DataTable, ma abbiamo tutti gli strumenti
per costruire un metodo ad hoc.
La soluzione che ho adottato sfrutta l'uso di un hashtable per conservare i valori univoci:

   1: 'VB.NET
   2: Private Function DistinctDt(ByVal dt As DataTable, ByVal colDistinct As Integer) As DataTable
   3:   Dim dtDistinct As DataTable = New DataTable()
   4:   Dim htKey As Hashtable = New Hashtable()
   5:   For Each row As DataRow In dt.Rows
   6:     If Not (htKey.Contains(row(colDistinct))) Then
   7:       dtDistinct.ImportRow(row)
   8:       htKey.Add(row(colDistinct), Nothing)
   9:     End If
  10:   Next
  11: Return dtDistinct
  12: End Function


   1: //C#
   2: private DataTable DistinctDt( DataTable dt, int colDistinct)
   3: {
   4:   DataTable dtDistinct = new DataTable();
   5:   Hashtable htKey = new Hashtable();
   6:   foreach( DataRow row in dt.Rows)
   7:   {
   8:     if( !htKey.Contains( row[ colDistinct]))
   9:     {
  10:       dtDistinct.ImportRow( row);
  11:       htKey.Add(row[colDistinct], null);
  12:     }
  13:   }
  14:   return dtDistinct;
  15: }

Il metodo accetta come parametri un oggetto DataTable su cui eseguire la Distinct ed inoltre un intero, cioè l'indice della colonna
su cui applicare la clausola (volendo si può anche passare il nome della DataColumn).
Il corpo del metodo è molto semplice, da sottolineare soltanto l'uso del metodo ImportRow che copia una DataRow in una DataTable,
conservando però tutte le impostazioni delle proprietà dell'oggetto copiato.

Read More »»

Tuesday, January 29, 2008

P/Invoke Interop Assistant

. Tuesday, January 29, 2008
0 commenti

Un interessante tool P/Invoke Interop Assistant, che fornisce un utile supporto nell'uso di P/Invoke, dato che genera tutto il necessario per richiamare funzioni unmanaged in file C# o VB.NET.
Fonte: blog di Corrado Cavalli

Read More »»

Monday, January 28, 2008

WPF Manga Reader

. Monday, January 28, 2008
0 commenti

Per gli appassionati e non solo, un lettore di manga scritto utilizzando WPF:

8

Read More »»

Friday, January 25, 2008

Esplora Server

. Friday, January 25, 2008
0 commenti

Esplora server ci consente, direttamente da Visual Studio, di conneterci a SQL Server o ad altri database. Per poter esaminare lo schema il primo passo è quello di creare una connessione al db.
In molti sanno che la connessione che viene creata in Esplora Server non necessita di essere salvata, in quanto ci pensa Visual Studio ma dove viene salvata?
Per rispondere a questa domanda, possiamo armarci di FileMon, utility free di Mark Russinovich e scoprirlo.
Filemon ci permette di monitorare le attività del sistema operativo in tempo reale, di conseguenza possiamo intercettare e visualizzare tutte le operazioni eseguite da Visual Studio quando generiamo una connessione attraverso Esplora Server.
Il filtro in FileMon:
EsploraServer2Come si può notare dall'immagine, ho indicato di includere solo le operazioni di scrittura eseguite dal processo devenv.*(Visual Studio).
Una volta terminata la configurazione di Filemon, possiamo inserire una connessione attraverso Esplora Server
(Strumenti>Connetti al Database).

Ed ecco che FileMon ci mostra il path in cui vengono memorizzate la connessione appena creata:
EsploraServer1



Per Visual Studio 2005 il path è il seguente:
C:\Documents and Settings\utente\Dati applicazioni\Microsoft\VisualStudio\8.0\ServerExplorer
mentre nel caso di Visual Studio 2003:
C:\Documents and Settings\utente\Dati applicazioni\Microsoft\VisualStudio\7.1\ServerExplorer
Il file è DefaultView.SEView in cui Visual Studio crittografa le stringhe di connessione proprio per non essere facilmente disponibili a chi possiede i diritti di accedere alle directory appena indicate.

Read More »»

Wednesday, January 23, 2008

KaXAML

. Wednesday, January 23, 2008
0 commenti

KaXAML è un editor di codice XAML che può tranquillamente sostituire XAMLPad.
Presenta tutta una serie di features molto interessanti come l'intellisense durante l'editing dei files, è dotato di una libreria di snippet evitando così di dover riscrivere sempre lo stesso codice, lo SnapShot per catturare le schermate, possibilità di editare più files in tabs separati, ecc.
Inoltre si può lanciare direttamente da Visual Studio quando si lavora con files XAML.
Per concludere, su codeplex è possibile scaricare anche il codice sorgente.

Read More »»

Tuesday, January 22, 2008

Ballata del programmatore

. Tuesday, January 22, 2008
0 commenti

Che dire....FANTASTICA:
La ballata del programmatore

Read More »»

Monday, January 21, 2008

Multibox

. Monday, January 21, 2008
1 commenti

Tempo fa ho pubblicato un post su simpleviewer per creare photogallery in flash, oggi invece vi segnalo multibox. Si tratta praticamente di un lightbox che supporta diversi formati non solo immagini, ma anche file flash, mp3, html ecc.
E' possibile personalizzare il layout ed inoltre è compatibile con i più popolari browser: Firefox(PC e Mac), Explorer(6 e 7), Safari.
Requisiti: mootools v1.11

Read More »»

Saturday, January 19, 2008

Informazioni sullo Schema

. Saturday, January 19, 2008
2 commenti

In ADO.NET 2.0 per recuperare informazioni dello schema da un oggetto SqlConnection è estremamente semplice, grazie all'uso del metodo GetSchema:

   1: Imports System.Data
   2: Imports System.Data.SqlClient
   3: .....
   4: Dim connectionSQL As String = "Data Source=.;Initial Catalog=aspnetdb;Integrated Security=True"
   5:  
   6: Dim dt As DataTable = New DataTable()
   7: Using sqlCon As SqlConnection = New SqlConnection(connectionSQL)
   8:     sqlCon.Open()
   9:     dt = sqlCon.GetSchema(SqlClientMetaDataCollectionNames.Tables)
  10:     sqlCon.Close()
  11: End Using

Da sottolineare l'uso dell'enumeratore SqlClientMetaDataCollectionNames che SQL Client .Net mette a disposizione per fornire l'insieme degli schemi supportati.
Nell'esempio mostrato otteniamo le tabelle disponibili nel db, ma possiamo anche conoscere la lista degli utenti con SqlClientMetaDataCollectionNames.Users oppure le colonne chiavi con SqlClientMetaDataCollectionNames.IndexColumns ecc.
Volendo anche con ADO.NET 1.1 possiamo conoscere queste informazioni anche se il metodo GetSchema è stato introdotto con il .NET Framework 2.0. Ma come?
Molto semplice basta dare uno sguardo al Profiler di SQL Server quando viene invocato il metodo GetSchema:
GetSchema1Come si può vedere vengono eseguite delle query in tabelle di sistema, a questo punto possiamo scrivere il codice per ADO.NET 1.1.




   1: string connectionSQL = "Data Source=.;Initial Catalog=aspnetdb;User ID=user;Password=password";
   2: DataTable dt = new DataTable();
   3: using( SqlConnection sqlCon = new SqlConnection( connectionSQL))
   4: {
   5:   sqlCon.Open();
   6:   SqlDataAdapter sqlDa = new SqlDataAdapter( 
   7: "select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE from INFORMATION_SCHEMA.TABLES",
   8:   sqlCon);
   9:   sqlDa.Fill( dt);
  10:   sqlCon.Close();
  11: }
  12: DataGrid1.DataSource = dt;
  13: DataGrid1.DataBind();

Il risultato del bind con la lista delle tabelle:
GetSchema2

Read More »»

Thursday, January 17, 2008

Syndicated Client Experiences Starter Kit

. Thursday, January 17, 2008
0 commenti

Oltre ai sorgenti del .NET Framework 3.5, Microsoft ha pensato bene di farci un altro regalo, rilasciando i sorgenti(con anche vari tutorial, video ecc) del client utilizzato per il New York Times.
Si tratta di un'applicazione WPF che come avrete già capito permette di leggere articoli dando l'impressione di sfogliare un giornale.
MSN Reader
Introducing the Syndicated Client Experiences Starter Kit & Reader SDK!

Read More »»

Disponibili i sorgenti del .NET Framework 3.5

.
0 commenti

E' sicuramente la notizia del giorno. Finalmente sono disponibili parte dei sorgenti delle librerie del .NET Framework, tra cui:

  • ASP.NET (System.Web)
  • NET Base Class Libraries
  • Windows Forms (System.Windows.Forms)
  • ADO.NET (System.Data)
  • XML (System.Xml)
  • WPF (System.Windows)

ed inoltre sono in corso anche le librerie di LINQ, WCF e Workflow.
Per poter accedere alle librerie in fase di debug su VS 2008 vi rimando al blog di Shawn Burke.

Read More »»

Wednesday, January 16, 2008

Excel Viewer

. Wednesday, January 16, 2008
0 commenti

Rilasciato da Microsft il viewer di Excel 2007. In questo modo senza avere sul proprio sistema Office 2007 è possibile visualizzare ma non modificare documenti Microsft Excel.

Read More »»

WMWiffiRouter

.
0 commenti

WMWiffiRouter è un software free in grado di trasformare il proprio smartphone o palmare che monti Windows Mobile 5 o 6 in un router wireless.
In altre parole è possibile condividere la connessione tra lo smartphone che diventa l'access point e il proprio computer in modo estremamente semplice.
Fonte: msmobiles.

Read More »»

Sunday, January 13, 2008

Default Pool di connessione

. Sunday, January 13, 2008
0 commenti

Nel Framework 2.0 per il provider Sql Server il pool connection è abilitato di default quindi per disattivarlo bisogna impostare la keyword Pooling a false nella stringa di connessione.
Ma come si può verificare?
Per confermare quanto detto è possibile controllare il contenuto di una proprietà privata InnerConnection dell'oggetto SqlConnection.
PoolConncetionControllando il contenuto della proprietà di due connessioni aperte in un blocco using, in modo da pulire le risorse, ci si rende conto che il provider Sql .NET  non chiude la connessione ma la memorizza in un pool per essere così riutilizzata in un secondo momento.

 

 


Il codice della verifica:

   1: Imports System.Data.SqlClient
   2: Imports System.Reflection
   3: ...
   4: Dim connectionSQL As String = "Data Source=.;Integrated Security=true"
   5:  
   6: Dim propertySqlCon As PropertyInfo = GetType(SqlConnection).GetProperty( _
   7:   "InnerConnection", BindingFlags.NonPublic Or BindingFlags.Instance)
   8: Dim valueObj, valueObj2 As Object
   9: Using sqlCon As SqlConnection = New SqlConnection(connectionSQL)
  10:   sqlCon.Open()
  11:   valueObj = propertySqlCon.GetValue(sqlCon, Nothing)
  12:   sqlCon.Close()
  13: End Using
  14: Using sqlCon As SqlConnection = New SqlConnection(connectionSQL)
  15:   sqlCon.Open()
  16:   valueObj2 = propertySqlCon.GetValue(sqlCon, Nothing)
  17:   sqlCon.Close()
  18: End Using
  19: If (valueObj Is valueObj2) Then
  20:   'Con Pool connection
  21:   Dim s As String = "Pool"
  22: Else
  23:   Dim s As String = "Nessun Pool"
  24: End If

Si può verificare anche attraverso il perfmon( Performance Monitor di Windows ) attraverso alcuni contatori come NumberOfPooledConnections, NumberOfActiveConnectionPools introdotti con ADO.NET 2.0.
A questo punto ho provato a fare la stesso esperimento anche con il provider OLE DB, infatti stando a ciò che si afferma su msdn il pool di connessione è abilitato di default(OLE DB Services=-4 per disattivare il pool).
Riscrivendo il codice visto in precedenza, usando questa volta OleDbConnection, ho verificato che non viene mai attivato un pool di connessione.
Qualcuno conosce una spiegazione?

Read More »»

Saturday, January 12, 2008

GOA: Windows Form con Flash o Silverlight

. Saturday, January 12, 2008
0 commenti

goa Tramite GOA è possibile scrivere applicazioni per Flash o Silverlight utilizzando controlli Windows Form, poichè si tratta di un'implementazione della libreria .NET System.Windows.Form.
Esistono due versioni della libreria: Standard e Professional(quest'ultima in versione alpha). Includono circa 40 controlli standard come per esempio:

  • Button, CheckBox, RadioButton, GroupBox, Label
  • TextBox, NumericUpDown
  • Form, MessageBox, Cursor
  • ListBox, CheckedListBox
  • ComboBox
  • TreeView
  • MonthCalendar
  • TabControl, Splitter

Read More »»

Thursday, January 10, 2008

PDFsharp library per PDF

. Thursday, January 10, 2008
0 commenti

Segnalo un'ottima library Open Source scritta interamente in C#, che in moltissimi già conosceranno: PDFsharp.
In modo estremamente semplice permette di creare e modificare( con possibilità di eseguire merge, ecc ) documenti Adobe PDF.

Read More »»

Monday, January 7, 2008

Versione del Framework

. Monday, January 7, 2008
0 commenti

Tra i diversi modi possibili per riconoscere quale/i Framework è/sono installato/i su di una macchina credo che il più semplice è quello di usare il tool CLRVer a riga di comando.
Quest'ultimo è presente nella cartella sdk\v2.0\bin di VS 2005:
C:\Programmi\Microsoft Visual Studio 8\SDK\v2.0\Bin (esempio)
clrverTra i parametri possibili  potete scegliere all che mostra la versione del Framework usata da tutti quei processi in esecuzione che ne fanno uso.

Read More »»

Sunday, January 6, 2008

Altre Rich Text Editor in Asp.Net

. Sunday, January 6, 2008
1 commenti

Dopo la segnalazione del controllo creato da Kannan Sundarajan può ritornar utile indicare altri controlli dello stesso tipo:

Read More »»

Friday, January 4, 2008

Cynergy Labs: Project Maestro

. Friday, January 4, 2008
2 commenti

La società Cynergy ha prodotto un primo video sul Project Maestro, un’interfaccia multitouch che, attraverso l'uso di particolari guanti permette di "manipolare" oggetti virtuali.
In buona sostanza riproduce alcune delle funzionalità di Microsoft Surface, da sottolineare come tra le varie tecnologie usate nel Project Maestro vi è anche Windows Presentation Foundation (WPF).

Read More »»

MasterPage nidificate in VS 2008

.
0 commenti

Come in moltissimi sanno con Asp.Net 2.0 sono state introdotte le pagine master, che possono a loro volta formare una struttura nidificata.
Purtroppo Visual Studio .NET 2005 non supporta questa ereditarietà tra pagine master in modo visuale.
Questa features è stata introdotta nel nuovo ambiente di lavoro Visual Studio.Net 2008, infatti oltre alle classiche masterpage esistono anche le nestedmasterpage(magnifico):
nestedmaster

Read More »»

Thursday, January 3, 2008

CMS Mojo

. Thursday, January 3, 2008
0 commenti

mojopawlogo3Mojo è un CMS gratuito scritto interamente in C#, che permette di gestire i propri portali/siti sia in ambiente Windows ma anche in ambiente Mono, quindi Linux o Mac.

Read More »»

Wednesday, January 2, 2008

Viigo

. Wednesday, January 2, 2008
0 commenti

viigo_personalViigo Personal è un programma free per Blackberry e Windows Mobile che permette di accedere in modo estremamente veloce ai contenuti web.
Possiede tutte le caratteristiche di un comune lettore RSS ma permette a differenza di altri reader di scovare automaticamente dato l'url di un sito, il relativo indirizzo del feed.
Inoltre permette di monitorare previsioni meteo, borsa, eventi locali e tanto altro.

Read More »»

Tuesday, January 1, 2008

Persistere la session in una web farm

. Tuesday, January 1, 2008
0 commenti

Tra le diverse strade per conservare la session in un'ambiente web farm c'è l'opzione StateServer.
Tale modalità presente sia nel Framework 1.1 che nel 2.0 permette di conservare la session su un server remoto, in tal modo si garantisce la conservazione della session anche quando l'applicazione web è installata su più server.
Per attivare le varie modalità di "preservazione" è necessario configurare l'attributo mode dell'elemento sessionState nel web.config.
Come prima cosa è necessario disporre della stessa chiave di crittografia specificata nell'elemento machineKey del machine.config o a livello di web.config.
Per sincronizzare la chiave di tutte le macchine(Web server) bisogna crearne una manualmente eliminando così l'impostazione AutoGenerate. Dalla stessa documentazione MSDN si evince che per creare una chiave e quindi garantire una corretta configurazione in una web farm bisogna far uso della classe RNGCryptoServiceProvider.
Altra cosa fondamentale da ricordare che l'applicazione web su tutti i server, deve presentare lo stesso path applicativo memorizzato nel metabase di IIS.
A questo punto si può procedere nella configurazione del servizio incaricato alla persistenza della session su un server.
Il servizio aspnet_state risiede al seguente path:
C:\WINDOWS\Microsoft.NET\Framework\versione\aspnet_state.exe
Per verificare che il servizio sia realmente in funzione(di default è spento) basta verificare in Strumenti di amministrazione>Servizi che il servizio Servizio stato di ASP.NET sia impostato su Automatico. In caso contrario si può attivare non solo da Servizi(Tasto destro>Proprietà>Tipo di avvio) ma anche da console con il seguente comando:
net start aspnet_state
La configurazione nel web.config:

   1: <sessionState mode="StateServer"
   2:   stateConnectionString="tcpip=nomeserver:42424"
   3:   cookieless="false"
   4:   timeout="20"
   5: />
La parte più importante riguarda l'attributo stateConnectionString in cui viene indicato il nome del server che può essere sia l'indirizzo IP che il nome della macchina, mentre 42424 è la porta che non può essere omessa e non dovrebbe essere possibile cambiarla(sia in Asp.Net 1.x che in 2.0).
Nel momento in cui si fa uso di tale modalità bisogna ricordarsi infine, che gli oggetti che possono essere conservati nella session devono essere serializzabili, quindi attenzione alle performance.

Read More »»