<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>I blogs di DotNetWork</title><link>http://community.dotnetwork.it/MainFeed.aspx</link><description>.NET by Subtext</description><generator>Subtext Version 1.9.5.176</generator><item><title>A small trick to intercept screen capture (printscreen)</title><link>http://community.dotnetwork.it/Excentric/archive/2010/07/30/a-small-trick-to-intercept-screen-capture-printscreen.aspx</link><pubDate>Fri, 30 Jul 2010 06:00:24 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/Excentric/archive/2010/07/30/a-small-trick-to-intercept-screen-capture-printscreen.aspx</guid><wfw:comment>http://community.dotnetwork.it/Excentric/comments/477.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/Excentric/comments/commentRss/477.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/Excentric/archive/2010/07/30/a-small-trick-to-intercept-screen-capture-printscreen.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/Excentric/services/trackbacks/477.aspx</trackback:ping><source url="http://community.dotnetwork.it/Excentric/rss.aspx">A small trick to intercept screen capture (printscreen)</source><description>&lt;p&gt;It is just a trick, not a solution made to avoid average users from doing things we don’t want. To solve this problem at the root we need to lock the printers, lock the emails and kill all paste keys in our applications. If the user has a screencapture program installed this does not work, but if the user is not able to install things on his PC it can help someway.&lt;/p&gt;  &lt;p&gt;On the form where we don’t want the user to capture screen we will activate the KeyPreview option using the property on the Form object. Then add this code to the KeyUp event.&lt;/p&gt;  &lt;pre class="CSharpFormat"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Form1_KeyUp(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, KeyEventArgs e)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt;( e.KeyCode == Keys.PrintScreen || e.KeyCode == Keys.Print)
            {
                Clipboard.Clear();
                e.Handled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            }
        }&lt;/pre&gt;

&lt;p&gt;This way after a Ctrl+ Printscreen or Alt+Printscreen if you go to Paint or Word and click Paste, there won’t be a copy of the screen on your document or bitmap.&lt;/p&gt;

&lt;p&gt;If someone know a more serious way to kill this option let us know and we will link it ;o).&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c118bfec-2ff3-4a2a-9013-996eaf893918" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/C%23/default.aspx" rel="tag"&gt;C#&lt;/a&gt;, &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/Printscreen/default.aspx" rel="tag"&gt;Printscreen&lt;/a&gt;, &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/Winforms/default.aspx" rel="tag"&gt;Winforms&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/Excentric/aggbug/477.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>Un trucco cattivello per intercettare lo screen capture (printscreen)</title><link>http://community.dotnetwork.it/sabrina/archive/2010/07/30/un-trucco-cattivello-per-intercettare-il-printscreen.aspx</link><pubDate>Fri, 30 Jul 2010 05:44:44 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/sabrina/archive/2010/07/30/un-trucco-cattivello-per-intercettare-il-printscreen.aspx</guid><wfw:comment>http://community.dotnetwork.it/sabrina/comments/476.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/476.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/sabrina/archive/2010/07/30/un-trucco-cattivello-per-intercettare-il-printscreen.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/sabrina/services/trackbacks/476.aspx</trackback:ping><source url="http://community.dotnetwork.it/sabrina/rss.aspx">Un trucco cattivello per intercettare lo screen capture (printscreen)</source><description>&lt;p&gt;Premetto che si tratta di un trucco non di una soluzione, fatto per evitare che l’utente medio faccia cose che preferiremmo non facesse, per risolvere il problema in modo più serio biosgnerebbe intercettarlo a livello di messaggio di sistema. Non so se esiste una policy di macchina per farlo (così come si può disattivare lo screen saver, chissà), ad ogni modo come indicato nel titolo è solo un viscido trucco da programmatore VBI (VB non sta per visual basic).&lt;/p&gt;
&lt;p&gt;Se installate un qualsiasi pacchetto per l’intercettazione e la cattura dello schermo questo trucco non funzionerà, però se siete voi (o il Sistemista cerbero) a controllare che cosa viene installato sulle macchine può dare un aiutino. &lt;/p&gt;
&lt;p&gt;Su una form attivate il KeyPreview ponendo la apposita property a True, e utilizzando il seguente codice:&lt;/p&gt;
&lt;pre class="CSharpFormat"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Form1_KeyUp(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, KeyEventArgs e)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt;( e.KeyCode == Keys.PrintScreen || e.KeyCode == Keys.Print)
            {
                Clipboard.Clear();
                e.Handled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            }
        }&lt;/pre&gt;
&lt;p&gt;evitate che dopo un Ctrl+Stamp o un Alt+Stamp andando in Paint e premendo Incolla, la videata venga inserita su una bitmap e spedita via e-mail o stampata.&lt;/p&gt;
&lt;p&gt;Se qualcuno ha implementato un metodo più serio per farlo, ce lo faccia sapere e ne pubblico volentieri un link.&lt;/p&gt;
&lt;div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c118bfec-2ff3-4a2a-9013-996eaf893918" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/C%23/default.aspx"&gt;C#&lt;/a&gt;, &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/Printscreen/default.aspx"&gt;Printscreen&lt;/a&gt;, &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/Winforms/default.aspx"&gt;Winforms&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/476.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>Un aiuto gratuito per chi sviluppa</title><link>http://community.dotnetwork.it/alberto/archive/2010/07/29/un-aiuto-gratuito-per-chi-sviluppa.aspx</link><pubDate>Thu, 29 Jul 2010 05:21:11 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/alberto/archive/2010/07/29/un-aiuto-gratuito-per-chi-sviluppa.aspx</guid><wfw:comment>http://community.dotnetwork.it/alberto/comments/475.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/alberto/comments/commentRss/475.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/alberto/archive/2010/07/29/un-aiuto-gratuito-per-chi-sviluppa.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/alberto/services/trackbacks/475.aspx</trackback:ping><source url="http://community.dotnetwork.it/alberto/rss.aspx">Un aiuto gratuito per chi sviluppa</source><description>&lt;p&gt;Girellando qua e la volevo segnalare un paio di link dove è possibile trovare ottimi tool per programmatori gratuiti:&lt;/p&gt;
&lt;p&gt;DevExpress mette a disposizione una 60ina di ottimi controlli:&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;&lt;a href="http://www.devexpress.com/60free"&gt;http://www.devexpress.com/60free&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Infragistics un bel po' di icone del loro icons pack:&lt;/p&gt;
&lt;p&gt;&lt;font face=""&gt;&lt;a href="http://www.infragistics.com/freeicons"&gt;http://www.infragistics.com/freeicons&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Alla prossima.&lt;/p&gt;
&lt;p&gt;Alberto.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://community.dotnetwork.it/alberto/aggbug/475.aspx" width="1" height="1" /&gt;</description><dc:creator>Alberto De Luca</dc:creator></item><item><title>[.NET Framework 4.0] Windows Update</title><link>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/28/.net-framework-4.0-windows-update.aspx</link><pubDate>Wed, 28 Jul 2010 15:02:24 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto/archive/2010/07/28/.net-framework-4.0-windows-update.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto/comments/474.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto/comments/commentRss/474.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/28/.net-framework-4.0-windows-update.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto/services/trackbacks/474.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto/rss.aspx">[.NET Framework 4.0] Windows Update</source><description>&lt;p&gt;&lt;font size="2"&gt;Qualcuno mi aveva chiesto quando sarà disponibile il &lt;strong&gt;.NET Framework 4.0&lt;/strong&gt; su &lt;strong&gt;Windows Update&lt;/strong&gt;, in modo da semplificare le fasi di installazione delle applicazioni all’utente.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;La buona notizia è che ora è possibile installarlo automaticamente da Windows Update. Per Windows XP l’installazione è opzionale, mentre per Windows Vista e Windows 7 è raccomandata.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;La cattiva notizia è che la versione che c’è su Windows Update è solamente la “&lt;strong&gt;Client Profile&lt;/strong&gt;”, una versione “ridotta”.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Se volete installare la versione “full” dovete ancora andare (o far andare il vostro utente) sul sito Internet:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=5765d7a8-7722-4888-a970-ac39b33fd8ab"&gt;&lt;u&gt;&lt;font size="2"&gt;.NET 4 Client Profile Web Install&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=e5ad0459-cbcc-4b4f-97b6-fb17111cf544"&gt;&lt;u&gt;&lt;font size="2"&gt;.NET 4 Client Profile Standalone Installer (Full Download&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;u&gt;&lt;font size="2"&gt;)&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9CFB2D51-5FF4-4491-B0E5-B386F32C0992&amp;amp;displaylang=en"&gt;&lt;u&gt;&lt;font size="2"&gt;.NET 4 Full Framework Web Install&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=0A391ABD-25C1-4FC0-919F-B21F31AB88B7&amp;amp;displaylang=en"&gt;&lt;u&gt;&lt;font size="2"&gt;.NET 4 Full Framework Standalone Installer (Full Download)&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Ulteriori dettagli, qui: &lt;/font&gt;&lt;a title="http://msmvps.com/blogs/bill/archive/2010/07/20/net-4-is-on-windows-update.aspx" href="http://msmvps.com/blogs/bill/archive/2010/07/20/net-4-is-on-windows-update.aspx"&gt;&lt;u&gt;&lt;font size="2"&gt;http://msmvps.com/blogs/bill/archive/2010/07/20/net-4-is-on-windows-update.aspx&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto/aggbug/474.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto (VB.NET)</dc:creator></item><item><title>Come determinare quale controllo ha sollevato l&amp;rsquo;evento Item Changed di un Currency Manager</title><link>http://community.dotnetwork.it/sabrina/archive/2010/07/27/come-determinare-quale-controllo-ha-sollevato-lrsquoevento-item-changed-di.aspx</link><pubDate>Tue, 27 Jul 2010 07:34:28 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/sabrina/archive/2010/07/27/come-determinare-quale-controllo-ha-sollevato-lrsquoevento-item-changed-di.aspx</guid><wfw:comment>http://community.dotnetwork.it/sabrina/comments/473.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/473.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/sabrina/archive/2010/07/27/come-determinare-quale-controllo-ha-sollevato-lrsquoevento-item-changed-di.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/sabrina/services/trackbacks/473.aspx</trackback:ping><source url="http://community.dotnetwork.it/sabrina/rss.aspx">Come determinare quale controllo ha sollevato l&amp;rsquo;evento Item Changed di un Currency Manager</source><description>&lt;p&gt;Un post veloce su C# al solito per sapere dove trovare una soluzione la prossima volta che mi serve.&lt;/p&gt;  &lt;p&gt;L’oggetto CurrencyManager è sia amato che odiato da chi pone quesiti nei forum dove di solito partecipo, io l’ho sempre trovato utile, anche se a volte è un pochino contorto nelle sue funzionalità, soprattutto per chi è nuovo al databinding.&lt;/p&gt;  &lt;p&gt;l’evento &lt;font color="#0080ff"&gt;&lt;strong&gt;ItemChanged&lt;/strong&gt;&lt;/font&gt;, Viene sollevato dal Currency manager ogni volta che un controllo bindato (italiese puro) nel contesto corrente, modifica i dati collegati ad una delle sue property. &lt;/p&gt;  &lt;p&gt;per determinare quale controllo ha sollevato l’evento, all’interno dell’ &lt;strong&gt;ItemChangedEventArgs&lt;/strong&gt; abbiamo una proprietà &lt;font color="#ff0000"&gt;&lt;strong&gt;Index&lt;/strong&gt;&lt;/font&gt;. E’ un indice a base 1, strano per essere in .Net, ad ogni modo, usando questo indice nella collezione &lt;strong&gt;Bindings&lt;/strong&gt; del Currency manager, siamo in grado di ricavare quale dei controlli ha modificato il dato. nell’esempio seguente, se una particolare textbox ha modificato i dati, aggiorniamo il database utilizzando una classe data provider.&lt;/p&gt;  &lt;pre class="CSharpFormat"&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; mCurMgr_ItemChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ItemChangedEventArgs e)
        {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (mCurMgr.Bindings[e.Index - 1].Control.Name == txtPercentualeCons.Name)
                {
                    mDpScenariAziende.Update();
                }
        }&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:69de7b2b-b946-4844-b538-4756d39a32fe" class="wlWriterEditableSmartContent"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/C%23" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Winforms" rel="tag"&gt;Winforms&lt;/a&gt;,&lt;a href="http://technorati.com/tags/CurrencyManager" rel="tag"&gt;CurrencyManager&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/473.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>How to determine which Control raised the Item Changed Event on a Currency Manager</title><link>http://community.dotnetwork.it/Excentric/archive/2010/07/27/how-to-determine-which-control-raised-the-item-changed-event.aspx</link><pubDate>Tue, 27 Jul 2010 07:09:59 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/Excentric/archive/2010/07/27/how-to-determine-which-control-raised-the-item-changed-event.aspx</guid><wfw:comment>http://community.dotnetwork.it/Excentric/comments/472.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/Excentric/comments/commentRss/472.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/Excentric/archive/2010/07/27/how-to-determine-which-control-raised-the-item-changed-event.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/Excentric/services/trackbacks/472.aspx</trackback:ping><source url="http://community.dotnetwork.it/Excentric/rss.aspx">How to determine which Control raised the Item Changed Event on a Currency Manager</source><description>&lt;p&gt;A simple and fast post on C#, as usual to glue the solution of a problem  in a place where I know I can find it in the future.&lt;/p&gt;  &lt;p&gt;The currency manager object is both loved and hated by those who usually ask questions in the forums where I use to answer, I found it useful, even though sometimes it seems a little bit tricky in its behaviours.&lt;/p&gt;  &lt;p&gt;The &lt;font color="#0080ff"&gt;&lt;strong&gt;ItemChanged&lt;/strong&gt;&lt;/font&gt; event, is raised by the Currency manager each time a bound control in the current context modifies the data bound to one of its properties. To determine which control has updated the data, in the &lt;strong&gt;ItemChangedEventArgs&lt;/strong&gt; we have an &lt;font color="#ff0000"&gt;&lt;strong&gt;Index&lt;/strong&gt;&lt;/font&gt; property. It is a 1 (one) based index, strange for the .Net, anyway, using this index in the &lt;strong&gt;Bindings&lt;/strong&gt; collection of the currency manager, we are able to find out which control modified the data. In the sample code below, if a particular textbox has modified the data, we Update the data on the Database using a Data provider Class.&lt;/p&gt;  &lt;pre class="CSharpFormat"&gt;
 &lt;span class="kwrd"&gt;void&lt;/span&gt; mCurMgr_ItemChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ItemChangedEventArgs e)
        {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (mCurMgr.Bindings[e.Index - 1].Control.Name == txtPercentualeCons.Name)
                {
                    mDpScenariAziende.Update();
                }
        }&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:69de7b2b-b946-4844-b538-4756d39a32fe" class="wlWriterEditableSmartContent"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/C%23" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Winforms" rel="tag"&gt;Winforms&lt;/a&gt;,&lt;a href="http://technorati.com/tags/CurrencyManager" rel="tag"&gt;CurrencyManager&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/Excentric/aggbug/472.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>(F#) Project Euler .net – Problema n. 1</title><link>http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/f-project-euler-.net--problema-n.-1.aspx</link><pubDate>Mon, 26 Jul 2010 11:18:31 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/f-project-euler-.net--problema-n.-1.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto.fs/comments/471.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto.fs/comments/commentRss/471.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/f-project-euler-.net--problema-n.-1.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto.fs/services/trackbacks/471.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto.fs/rss.aspx">(F#) Project Euler .net – Problema n. 1</source><description>&lt;p&gt;Molto spesso, per imparare un nuovo linguaggio di programmazione, si esaminano alcuni problemi matematici. Questo avviene per due motivi: il primo è motivo deriva dal fatto che molti piccoli problemi matematici sono molto semplici e quindi non aggiungono livelli di complessità all’attuale nostro problema di imparare un particolare linguaggio di programmazione. Il secondo motivo è dato dal fatto che questo approccio consente di imparare in modo più efficace i costrutti di base della programmazione nel linguaggio scelto: cicli, istruzioni condizionali, assegnazione di valori, visualizzazione del risultato e così via.&lt;/p&gt;
&lt;p sizset="7" sizcache="0"&gt;Un sito interessante che raccoglie molti di questi problemi matematici, in ordine di difficoltà crescente, è “&lt;strong&gt;Project Euler .net&lt;/strong&gt;” (&lt;a title="http://projecteuler.net" jquery1280150176515="3" href="http://projecteuler.net/"&gt;&lt;strong&gt;http://projecteuler.net&lt;/strong&gt;&lt;/a&gt;). Potete registrarvi al sito per provare a dare le vostre soluzioni. Quando fornirete una soluzione corretta, vedrete nel vostro “pannello” dei problemi le soluzioni trovate e potrete anche visualizzare un file PDF contenente una spiegazione dettagliata della soluzione proposta.&lt;/p&gt;
&lt;p&gt;Utilizzerò pertanto qualcuno di questi problemi per costruire il nostro “vocabolario” delle istruzioni di F#. Il fatto che il sito abbia il suffisso “.net” è solamente un caso: non ha alcuna attinenza con il Framework .NET  &lt;img class="wp-smiley" alt=";-)" src="http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif" /&gt; &lt;/p&gt;
&lt;p&gt;Il primo problema consiste nell’esaminare e sommare tra loro tutti i multipli di 3 e di 5 in un intervallo di numeri naturali che va da 1 a “x”. Per esempio, tra 1 e 9, la somma dei multipli di 3 e 5 è pari a 23 (= 3+5+6+9).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trovare la somma di tutti i numeri multipli di 3 e di 5, tra 1 e 999.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Possiamo risolvere questo problema in almeno due modi (ma probabilmente anche in molti altri). In entrambi i casi otteniamo il numero &lt;strong&gt;233168&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;prima soluzione&lt;/strong&gt; è la seguente:&lt;/p&gt;
&lt;pre class="CSharpFormat"&gt;#light

let rec sum_mul xs =
  match xs with
  | []    -&amp;gt; 0
  | y::ys when y % 3 = 0 || y % 5 = 0 -&amp;gt; y + sum_mul ys
  | y::ys -&amp;gt; sum_mul ys

let sum = sum_mul [1 .. 999]

printfn &lt;span class="str"&gt;"%d"&lt;/span&gt; sum&lt;/pre&gt;
&lt;p&gt;Esaminiamo come funziona questa prima soluzione.&lt;/p&gt;
&lt;p&gt;La direttiva &lt;strong&gt;#light&lt;/strong&gt; permette di scrivere il codice in modo più semplice, senza le parole chiave &lt;strong&gt;begin … end&lt;/strong&gt; e senza altri caratteri che indicano il termine delle righe di istruzione (come il “&lt;strong&gt;;&lt;/strong&gt;” di C#, per esempio). I cicli o i blocchi di codice sono definiti dall’indentazione del codice (cioè dai rientri), mentre il termine delle istruzioni è semplicemente riconosciuto dalla presenza di spazi e di ritorni a capo.&lt;/p&gt;
&lt;p&gt;Nella seconda riga abbiamo inserito una funzione ricorsiva, denominata &lt;strong&gt;sum_mul&lt;/strong&gt;, che accetta il parametro xs.&lt;/p&gt;
&lt;p&gt;Nelle righe dalla 3^ alla 6^ c’è un esempio di &lt;strong&gt;pattern matching&lt;/strong&gt;: un metodo elegante per gestire varie alternative (come uno &lt;strong&gt;switch&lt;/strong&gt; o un &lt;strong&gt;select case&lt;/strong&gt;). Il programma confronta &lt;strong&gt;xs&lt;/strong&gt; con alcuni pattern, ciascuno scritto in una riga separata e preceduti dal simbolo “&lt;strong&gt;|&lt;/strong&gt;” (pipe). Nel primo caso il confronto ha successo quando &lt;strong&gt;xs&lt;/strong&gt; è una lista vuota e in tal caso &lt;strong&gt;sum_mul&lt;/strong&gt; restituisce &lt;strong&gt;0&lt;/strong&gt; (zero).&lt;/p&gt;
&lt;p&gt;Negli altri casi, &lt;strong&gt;xs&lt;/strong&gt; corrisponde a una lista, in cui il primo elemento (la &lt;strong&gt;testa&lt;/strong&gt; della lista) viene chiamato &lt;strong&gt;y&lt;/strong&gt; e il resto della lista (la &lt;strong&gt;coda&lt;/strong&gt; della lista) viene chiamato &lt;strong&gt;ys&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Se &lt;strong&gt;y&lt;/strong&gt; è divisibile per 3 o per 5 (utilizzando l’operatore modulo: &lt;strong&gt;%&lt;/strong&gt;) aggiungiamo il numero al risultato e poi eseguiamo la stessa funzione ricorsivamente per la coda della lista. In caso contrario, semplicemente saltiamo il valore di testa e continuiamo ad esaminare la coda della lista. &lt;/p&gt;
&lt;p&gt;Nell’8^ riga chiamiamo effettivamente la funzione &lt;strong&gt;sum_mul&lt;/strong&gt; passando una lista come argomento. Questa lista è composta da tutti i numeri interi da 1 a 999 (o qualsiasi altro numero abbiate fissato come numero finale). &lt;/p&gt;
&lt;p&gt;Per eseguire il programma e visualizzare il risultato potete premere &lt;strong&gt;F5&lt;/strong&gt; come al solito (l’istruzione &lt;strong&gt;printfn&lt;/strong&gt; stamperà il risultato in una finestra analoga al &lt;strong&gt;prompt di comandi&lt;/strong&gt;), oppure potete evidenziare la porzione di codice da eseguire e premere contemporaneamente &lt;strong&gt;ALT + INVIO&lt;/strong&gt;. In quest’ultimo caso, il programma sarà eseguito e il risultato sarà visibile nella finestra “&lt;strong&gt;F# interactive&lt;/strong&gt;” che comparirà nella parte inferiore del video. &lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;seconda soluzione&lt;/strong&gt; invece è maggiormente ottimizzata:&lt;/p&gt;
&lt;pre class="CSharpFormat"&gt;#light

let sum_mult max step =
  let n = max / step
  step*n*(n + 1)/2

let max = 999
let sum2 = sum_mult max 3 + sum_mult max 5 - sum_mult max 15

printfn &lt;span class="str"&gt;"%d"&lt;/span&gt; sum2&lt;/pre&gt;
&lt;p&gt;Partendo dal presupposto che stiamo sommando tutti i multipli di 3 e di 5, possiamo anche effettuare una semplice operazione per trovare tutti i multipli dell’uno e dell’altro valore, invece di provare tutti i valori nell’intervallo considerato (da 1 a 999). In tal caso dobbiamo anche sottrarre tutti i multipli di 15, perché 15 è divisibile sia per 3 sia per 5, e quindi dobbiamo evitare di contare tali valori per due volte.&lt;/p&gt;
&lt;p&gt;Ricordando che la somma dei primi n numeri interi è uguale a &lt;strong&gt;n*(n+1)/2&lt;/strong&gt;, possiamo utilizzare questa semplice formula per eseguire l’operazione desiderata, prima con il numero 3, poi con il numero 5 e infine con il numero 15.&lt;/p&gt;
&lt;p&gt;Nella 2^ linea definiamo la funzione &lt;strong&gt;sum_mult&lt;/strong&gt; che prende due argomenti interi: &lt;strong&gt;max&lt;/strong&gt; e &lt;strong&gt;step&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Nella linea successiva, definiamo un identificatore locale denominato &lt;strong&gt;n&lt;/strong&gt;, il cui ambito di visibilità è limitato all’interno della funzione &lt;strong&gt;sum_mult&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Il resto del codice è estremamente semplice, dato che applichiamo la formula sopra indicata. &lt;/p&gt;
&lt;p&gt;Confrontando la &lt;strong&gt;complessità computazionale&lt;/strong&gt; dei due programmi (chiamata “&lt;strong&gt;O grande&lt;/strong&gt;”), troviamo che nel primo caso abbiamo una complessità &lt;strong&gt;O(n)&lt;/strong&gt;, mentre nel secondo caso abbiamo &lt;strong&gt;O(1)&lt;/strong&gt;. Nel secondo caso, quindi, la complessità (e la durata di esecuzione) è indipendente dal numero di valori da esaminare (in questo caso 999). &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p sizset="8" sizcache="0"&gt;&lt;em&gt;N.B. lo spunto per questo post e l’informazione sul sito Project Euler .net è stato gentilmente concesso da Claudio Cherubino (&lt;/em&gt;&lt;a title="http://www.fsharp.it" jquery1280150176515="5" href="http://www.fsharp.it/"&gt;&lt;em&gt;http://www.fsharp.it&lt;/em&gt;&lt;/a&gt;&lt;em&gt; e &lt;/em&gt;&lt;a title="http://www.claudiocherubino.it/" jquery1280150176515="7" href="http://www.claudiocherubino.it/"&gt;&lt;em&gt;http://www.claudiocherubino.it/&lt;/em&gt;&lt;/a&gt;&lt;em&gt;). Grazie!&lt;/em&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto.fs/aggbug/471.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto (F#)</dc:creator></item><item><title>Evento tecnico a Belluno (“Community Tour”)</title><link>http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/evento-tecnico-a-belluno-community-tour.aspx</link><pubDate>Mon, 26 Jul 2010 11:17:37 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/evento-tecnico-a-belluno-community-tour.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto.fs/comments/470.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto.fs/comments/commentRss/470.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/evento-tecnico-a-belluno-community-tour.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto.fs/services/trackbacks/470.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto.fs/rss.aspx">Evento tecnico a Belluno (“Community Tour”)</source><description>&lt;p&gt;&lt;font size="2"&gt;Questo post per informarvi che sto organizzando un evento tecnico: il “&lt;strong&gt;&lt;font color="#008040"&gt;Community Tour” a Belluno&lt;/font&gt;&lt;/strong&gt;, con la collaborazione di &lt;strong&gt;Microsoft Italia&lt;/strong&gt;, delle Community tecniche &lt;strong&gt;XeDotNet&lt;/strong&gt; e &lt;strong&gt;DotNetWork&lt;/strong&gt; e dell’&lt;strong&gt;Ordine degli Ingegneri della Provincia di Belluno&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p sizset="16" sizcache="0"&gt;&lt;font size="2"&gt;Dopo varie consultazioni, preventivi ecc. ecc., abbiamo definito la data di &lt;strong&gt;&lt;font color="#008000"&gt;Venerdì 15 Ottobre 2010&lt;/font&gt;&lt;/strong&gt;, soltanto al pomeriggio, presso la sala riunioni dell’Ordine degli Ingegneri della Provincia di Belluno, in centro a Belluno (Piazza Martiri n. 2, a fianco del Teatro Comunale, 4° piano). Mappa: &lt;/font&gt;&lt;a jquery1280150176515="9" href="http://www.ordineingegneri.bl.it/main/sede.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff" size="2"&gt;http://www.ordineingegneri.bl.it/main/sede.aspx&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;La sala ha una capienza di &lt;strong&gt;40-45 persone&lt;/strong&gt; e l’Ordine la mette a disposizione gratuitamente.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;Ci saranno 3-4 sessioni di un’ora nel pomeriggio &lt;strong&gt;dalle 14 alle 18.30&lt;/strong&gt;, incentrate su &lt;strong&gt;Visual Studio 2010&lt;/strong&gt;, &lt;strong&gt;Windows Azure&lt;/strong&gt; e forse su &lt;strong&gt;Windows Phone 7&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;Appena possibile sarà aperta una pagina per le iscrizioni sul sito degli eventi di Microsoft Italia.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto.fs/aggbug/470.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto (F#)</dc:creator></item><item><title>F# – Il blog di Don Syme su F#</title><link>http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/f--il-blog-di-don-syme-su-f.aspx</link><pubDate>Mon, 26 Jul 2010 11:17:07 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/f--il-blog-di-don-syme-su-f.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto.fs/comments/469.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto.fs/comments/commentRss/469.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/f--il-blog-di-don-syme-su-f.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto.fs/services/trackbacks/469.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto.fs/rss.aspx">F# – Il blog di Don Syme su F#</source><description>&lt;div class="entry-content"&gt;
&lt;div class="snap_preview" sizset="30" sizcache="0"&gt;
&lt;p sizset="30" sizcache="0"&gt;Un blog interessante sulla programmazione in F# di Don Syme: &lt;a jquery1280150176515="13" href="http://blogs.msdn.com/b/dsyme/"&gt;http://blogs.msdn.com/b/dsyme/&lt;/a&gt;.&lt;br /&gt;
Vi sorprenderà scoprire che i post iniziano a Gennaio 2005, sul linguaggio F# definito un linguaggio di ricerca (nato nei laboratori di Microsoft Research). Questo “nuovo linguaggio”, alla fine non è poi nemmeno così tanto nuovo, visto che ha già ben 5 anni di “vita”.&lt;br /&gt;
Sicuramente, però, è un linguaggio nuovo per quasi tutti gli sviluppatori e per le aziende.&lt;br /&gt;
Sono pronto a scommettere che questo linguaggio avrà un grande futuro…&lt;/p&gt;
&lt;div class="geo geo-post" id="geo-post-11" style="DISPLAY: none"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- .entry-content --&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto.fs/aggbug/469.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto (F#)</dc:creator></item><item><title>F#: un linguaggio multi-paradigma</title><link>http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/f-un-linguaggio-multi-paradigma.aspx</link><pubDate>Mon, 26 Jul 2010 11:16:25 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/f-un-linguaggio-multi-paradigma.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto.fs/comments/468.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto.fs/comments/commentRss/468.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/f-un-linguaggio-multi-paradigma.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto.fs/services/trackbacks/468.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto.fs/rss.aspx">F#: un linguaggio multi-paradigma</source><description>&lt;p&gt;F# utilizza tre paradigmi di programmazione: oltre alla &lt;strong&gt;programmazione funzionale&lt;/strong&gt;, già citata, adotta anche il paradigma della &lt;strong&gt;programmazione imperativa&lt;/strong&gt; e quello della &lt;strong&gt;programmazione orientata agli oggetti&lt;/strong&gt;, permettendo di utilizzarli tutti insieme in modo coerente e ben orchestrato.&lt;/p&gt;
&lt;p&gt;Questo approccio multi-paradigma può quindi essere utilizzato con le librerie .NET per eseguire attività di quali l’implementazione di interfacce grafiche (GUI), l’accesso ai dati, la programmazione distribuita e molto altro.&lt;/p&gt;
&lt;p&gt;La programmazione funzionale, adottata dal nuovo linguaggio F#, è forse quella che meno è conosciuta da molti programmatori e questo richiede del tempo per impararla e per padroneggiarla, ma rende la programmazione più semplice, per vari motivi: i programmi F# tendono ad essere scritti in modo più formalmente corretto e l’inferenza dei tipi rende i programmi più corti e chiari.&lt;/p&gt;
&lt;p&gt;Sebbene sia un linguaggio di derivazione FORTRAN e quindi orientato anche al calcolo scientifico, non è un linguaggio confinato solo nell’ambito scientifico e accademico: può essere utilmente impiegato per migliorare gli algoritmi utilizzati nelle nostre applicazioni e quindi migliorare le prestazioni di queste ultime.&lt;/p&gt;
&lt;p&gt;Con F# la programmazione funzionale diventa realmente pratica, facile da imparare e una potente estensione della piattaforma .NET.&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto.fs/aggbug/468.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto (F#)</dc:creator></item><item><title>printfn “Hello World!”</title><link>http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/printfn-hello-world.aspx</link><pubDate>Mon, 26 Jul 2010 11:15:21 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/printfn-hello-world.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto.fs/comments/467.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto.fs/comments/commentRss/467.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto.fs/archive/2010/07/26/printfn-hello-world.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto.fs/services/trackbacks/467.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto.fs/rss.aspx">printfn “Hello World!”</source><description>&lt;div class="entry-content"&gt;
&lt;div class="snap_preview"&gt;
&lt;p&gt;Ebbene sì, il titolo di questo post è esattamente l’istruzione che in F# permette di stampare la stringa “&lt;strong&gt;Hello World!&lt;/strong&gt;“, come previsto dal copione di qualsiasi presentazione di un linguaggio di programmazione.&lt;/p&gt;
&lt;p&gt;In questo blog raccoglierò informazioni su &lt;strong&gt;F#&lt;/strong&gt;, il linguaggio “managed” sulla piattaforma .NET di Microsoft, un linguaggio funzionale che esce un po’ dagli schemi classici della programmazione in Visual Basic e in C#.&lt;/p&gt;
&lt;p&gt;A presto!&lt;/p&gt;
&lt;div class="geo geo-post" id="geo-post-1" style="DISPLAY: none"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;!-- .entry-content --&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto.fs/aggbug/467.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto (F#)</dc:creator></item><item><title>[REMIX 10] Disponibile la registrazione video</title><link>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/25/remix-10-disponibile-la-registrazione-video.aspx</link><pubDate>Sun, 25 Jul 2010 02:14:57 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto/archive/2010/07/25/remix-10-disponibile-la-registrazione-video.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto/comments/466.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto/comments/commentRss/466.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/25/remix-10-disponibile-la-registrazione-video.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto/services/trackbacks/466.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto/rss.aspx">[REMIX 10] Disponibile la registrazione video</source><description>&lt;p&gt;&lt;font size="3"&gt;Da qualche giorno è disponibile la registrazione video dell’evento REMIX 10.&lt;/font&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;&lt;font size="3"&gt;(clicca l’immagine per aprire il sito ufficiale di Remix 10)&lt;/font&gt;&lt;/em&gt;&lt;a href="http://www.microsoft.com/italy/nextweb/remix/keynote.aspx" target="_blank"&gt;&lt;font color="#000000" size="3"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://community.dotnetwork.it/images/community_dotnetwork_it/mario.deghetto/WindowsLiveWriter/REMIX10Disponibilelaregistrazionevideo_57DB/image_3.png" width="476" height="323" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Argomenti trattati:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;- HTML 5&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;- WEB&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;- Windows Phone&lt;/font&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto/aggbug/466.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto</dc:creator></item><item><title>[Windows Azure] Benefit per i sottoscrittori di MSDN</title><link>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/24/windows-azure-benefit-per-i-sottoscrittori-di-msdn.aspx</link><pubDate>Sat, 24 Jul 2010 11:08:01 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto/archive/2010/07/24/windows-azure-benefit-per-i-sottoscrittori-di-msdn.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto/comments/465.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto/comments/commentRss/465.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/24/windows-azure-benefit-per-i-sottoscrittori-di-msdn.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto/services/trackbacks/465.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto/rss.aspx">[Windows Azure] Benefit per i sottoscrittori di MSDN</source><description>&lt;p&gt;&lt;font size="2"&gt;Il mitico Somasegar ha pubblicato nel suo blog un post (&lt;/font&gt;&lt;a title="http://blogs.msdn.com/b/somasegar/archive/2010/07/22/msdn-double-the-azure.aspx" href="http://blogs.msdn.com/b/somasegar/archive/2010/07/22/msdn-double-the-azure.aspx"&gt;&lt;font size="2"&gt;http://blogs.msdn.com/b/somasegar/archive/2010/07/22/msdn-double-the-azure.aspx&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;) con il quale annuncia il raddoppio del benefit relativo alla sottoscrizione di un abbonamento ai servizi di Windows Azure per gli abbonati a MSDN.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;In pratica il beneficio si è esteso da 8 a 16 mesi, alle stesse condizioni precedenti.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Qui trovate tutte le indicazioni dettagliate sull’ammontare di risorse messo a disposizione gratuitamente per 16 mesi: &lt;/font&gt;&lt;a title="http://msdn.microsoft.com/en-us/subscriptions/ee461076.aspx" href="http://msdn.microsoft.com/en-us/subscriptions/ee461076.aspx"&gt;&lt;font size="2"&gt;http://msdn.microsoft.com/en-us/subscriptions/ee461076.aspx&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Niente male davvero!&lt;/font&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto/aggbug/465.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto</dc:creator></item><item><title>[VB.NET] Project Euler .net &amp;ndash; Problema n. 1</title><link>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/24/vb.net-project-euler-.net-ndash-problema-n.-1.aspx</link><pubDate>Sat, 24 Jul 2010 09:55:49 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto/archive/2010/07/24/vb.net-project-euler-.net-ndash-problema-n.-1.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto/comments/464.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto/comments/commentRss/464.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/24/vb.net-project-euler-.net-ndash-problema-n.-1.aspx#comment</comments><slash:comments>2</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto/services/trackbacks/464.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto/rss.aspx">[VB.NET] Project Euler .net &amp;ndash; Problema n. 1</source><description>&lt;p&gt;Molto spesso, per imparare un nuovo linguaggio di programmazione, si esaminano alcuni problemi matematici. Questo avviene per due motivi: il primo è motivo deriva dal fatto che molti piccoli problemi matematici sono molto semplici e quindi non aggiungono livelli di complessità all’attuale nostro problema di imparare un particolare linguaggio di programmazione. Il secondo motivo è dato dal fatto che questo approccio consente di imparare in modo più efficace i costrutti di base della programmazione nel linguaggio scelto: cicli, istruzioni condizionali, assegnazione di valori, visualizzazione del risultato e così via.&lt;/p&gt;  &lt;p&gt;Un sito interessante che raccoglie molti di questi problemi matematici, in ordine di difficoltà crescente, è “&lt;strong&gt;Project Euler .net&lt;/strong&gt;” (&lt;a title="http://projecteuler.net" href="http://projecteuler.net"&gt;&lt;strong&gt;http://projecteuler.net&lt;/strong&gt;&lt;/a&gt;). Potete registrarvi al sito per provare a dare le vostre soluzioni. Quando fornirete una soluzione corretta, vedrete nel vostro “pannello” dei problemi le soluzioni trovate e potrete anche visualizzare un file PDF contenente una spiegazione dettagliata della soluzione proposta.&lt;/p&gt;  &lt;p&gt;Utilizzerò pertanto qualcuno di questi problemi per costruire il nostro “vocabolario” di algoritmi in VB.NET. Il fatto che il sito abbia il suffisso “.net” è solamente un caso: non ha alcuna attinenza con il Framework .NET  ;-)&lt;/p&gt;  &lt;p&gt;Il primo problema consiste nell’esaminare e sommare tra loro tutti i multipli di 3 e di 5 in un intervallo di numeri naturali che va da 1 a “x”. Per esempio, tra 1 e 9, la somma dei multipli di 3 e 5 è pari a 23 (= 3+5+6+9).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Trovare la somma di tutti i numeri multipli di 3 e di 5, tra 1 e 999.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Possiamo risolvere questo problema in almeno due modi (ma probabilmente anche in molti altri). In entrambi i casi otteniamo il numero &lt;strong&gt;233168&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;La &lt;strong&gt;prima soluzione&lt;/strong&gt; è la seguente:&lt;/p&gt;  &lt;pre class="VisualBasicFormat"&gt;  &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Button1_Click(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; System.&lt;span class="kwrd"&gt;Object&lt;/span&gt;,&lt;br /&gt;        &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; System.EventArgs) &lt;span class="kwrd"&gt;Handles&lt;/span&gt; Button1.Click
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; risultato &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; max &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = 999
    &lt;span class="kwrd"&gt;For&lt;/span&gt; i &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = 1 &lt;span class="kwrd"&gt;To&lt;/span&gt; max
      &lt;span class="kwrd"&gt;If&lt;/span&gt; i &lt;span class="kwrd"&gt;Mod&lt;/span&gt; 3 = 0 &lt;span class="kwrd"&gt;Or&lt;/span&gt; i &lt;span class="kwrd"&gt;Mod&lt;/span&gt; 5 = 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt;
        risultato += i
      &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
    &lt;span class="kwrd"&gt;Next&lt;/span&gt;
    MessageBox.Show(risultato.ToString)
  &lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Esaminiamo come funziona questa prima soluzione.&lt;/p&gt;

&lt;p&gt;Il codice è inserito nel gestore dell’evento Click di un pulsante. &lt;/p&gt;

&lt;p&gt;Prima di tutto definiamo le variabili risultato e max: la prima per accogliere il valore del risultato finale, la seconda per fissare il numero massimo dell’intervallo di numeri naturali da valutare.&lt;/p&gt;

&lt;p&gt;Subito dopo abbiamo definito un ciclo, con un indice “i” che varia da 1 al numero contenuto nella variabile “max”. In tale ciclo analizziamo ciascun numero naturale, verificando se sia divisibile per 3 o per 5 (senza resto). Se è divisibile, il numero viene sommato al risultato, altrimenti viene ignorato.&lt;/p&gt;

&lt;p&gt;Infine, visualizziamo il valore risultante.&lt;/p&gt;

&lt;p&gt;La &lt;strong&gt;seconda soluzione&lt;/strong&gt; invece è maggiormente ottimizzata:&lt;/p&gt;

&lt;pre class="VisualBasicFormat"&gt;  &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Button2_Click(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwrd"&gt;As&lt;/span&gt; System.&lt;span class="kwrd"&gt;Object&lt;/span&gt;, &lt;br /&gt;        &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwrd"&gt;As&lt;/span&gt; System.EventArgs) &lt;span class="kwrd"&gt;Handles&lt;/span&gt; Button2.Click
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; risultato &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; max &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = 999
    risultato = calcola(max, 3) + calcola(max, 5) - calcola(max, 15)
    MessageBox.Show(risultato.ToString)
  &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;

  &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; calcola(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; max &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;, &lt;br /&gt;        &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; passo &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; n = max \ passo
    &lt;span class="kwrd"&gt;Return&lt;/span&gt; passo * n * (n + 1) \ 2
  &lt;span class="kwrd"&gt;End&lt;/span&gt; Function&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Partendo dal presupposto che stiamo sommando tutti i multipli di 3 e di 5, possiamo anche effettuare una semplice operazione per trovare tutti i multipli dell’uno e dell’altro valore, invece di provare tutti i valori nell’intervallo considerato (da 1 a 999). In tal caso dobbiamo anche sottrarre tutti i multipli di 15, perché 15 è divisibile sia per 3 sia per 5, e quindi dobbiamo evitare di contare tali valori per due volte.&lt;/p&gt;

&lt;p&gt;Ricordando che la somma dei primi n numeri interi è uguale a &lt;strong&gt;n*(n+1)/2&lt;/strong&gt;, possiamo utilizzare questa semplice formula per eseguire l’operazione desiderata, prima con il numero 3, poi con il numero 5 e infine con il numero 15.&lt;/p&gt;

&lt;p&gt;La differenza, rispetto al programma precedente, sta tutta nell’istruzione seguente&lt;/p&gt;

&lt;pre class="VisualBasicFormat"&gt;risultato = calcola(max, 3) + calcola(max, 5) - calcola(max, 15)&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;e nell’aggiunta della funzione di calcolo denominata “calcola”.&lt;/p&gt;

&lt;p&gt;Tale funzione accetta gli argomenti “max” e “passo” che rappresentano rispettivamente il valore massimo dell’intervallo di numeri naturali (in questo caso 999) e il divisore da considerare (3, 5 o 15). La funzione “calcola” realizza semplicemente il calcolo secondo la formula sopra indicata.&lt;/p&gt;

&lt;p&gt;Confrontando la &lt;strong&gt;complessità computazionale&lt;/strong&gt; dei due programmi (chiamata “&lt;strong&gt;O grande&lt;/strong&gt;”), troviamo che nel primo caso abbiamo una complessità &lt;strong&gt;O(n)&lt;/strong&gt;, mentre nel secondo caso abbiamo &lt;strong&gt;O(1)&lt;/strong&gt;. Nel secondo caso, quindi, la complessità (e la durata di esecuzione) è indipendente dal numero di valori da esaminare (in questo caso 999). &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;N.B. lo spunto per questo post e l’informazione sul sito Project Euler .net è stato gentilmente concesso da Claudio Cherubino (&lt;/em&gt;&lt;a title="http://www.fsharp.it" href="http://www.fsharp.it"&gt;&lt;em&gt;http://www.fsharp.it&lt;/em&gt;&lt;/a&gt;&lt;em&gt; e &lt;/em&gt;&lt;a title="http://www.claudiocherubino.it/" href="http://www.claudiocherubino.it/"&gt;&lt;em&gt;http://www.claudiocherubino.it/&lt;/em&gt;&lt;/a&gt;&lt;em&gt;). Grazie!&lt;/em&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto/aggbug/464.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto</dc:creator></item><item><title>Perpetuum Software: Report Sharp Shooter con la nuova Ribbon UI</title><link>http://community.dotnetwork.it/alberto/archive/2010/07/22/perpetuum-software-report-sharp-shooter-con-la-nuova-ribbon-ui.aspx</link><pubDate>Thu, 22 Jul 2010 09:09:32 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/alberto/archive/2010/07/22/perpetuum-software-report-sharp-shooter-con-la-nuova-ribbon-ui.aspx</guid><wfw:comment>http://community.dotnetwork.it/alberto/comments/463.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/alberto/comments/commentRss/463.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/alberto/archive/2010/07/22/perpetuum-software-report-sharp-shooter-con-la-nuova-ribbon-ui.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/alberto/services/trackbacks/463.aspx</trackback:ping><source url="http://community.dotnetwork.it/alberto/rss.aspx">Perpetuum Software: Report Sharp Shooter con la nuova Ribbon UI</source><description>&lt;p&gt;Perpetuum Software ha rilasciato l'ultima versione di Report Sharp Shooter introducendo l'interfaccia Ribbon per il Designer: &lt;font face=""&gt;&lt;a href="http://www.perpetuumsoft.it/News.aspx?pid=&amp;amp;id=326"&gt;http://www.perpetuumsoft.it/News.aspx?pid=&amp;amp;id=326&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Un'ulteriore apprezzato upgrade per questo potente strumento di reportistica!&lt;/p&gt;
&lt;p&gt;Alberto.&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/alberto/aggbug/463.aspx" width="1" height="1" /&gt;</description><dc:creator>Alberto De Luca</dc:creator></item><item><title>Pubblicati gli "atti" del Remix 2010</title><link>http://community.dotnetwork.it/alberto/archive/2010/07/22/pubblicati-gli-atti-del-remix-2010.aspx</link><pubDate>Thu, 22 Jul 2010 07:46:09 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/alberto/archive/2010/07/22/pubblicati-gli-atti-del-remix-2010.aspx</guid><wfw:comment>http://community.dotnetwork.it/alberto/comments/462.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/alberto/comments/commentRss/462.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/alberto/archive/2010/07/22/pubblicati-gli-atti-del-remix-2010.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/alberto/services/trackbacks/462.aspx</trackback:ping><source url="http://community.dotnetwork.it/alberto/rss.aspx">Pubblicati gli "atti" del Remix 2010</source><description>&lt;p&gt;Ciao a tutti,&lt;/p&gt;
&lt;p&gt;a questo indirizzo: &lt;font face=""&gt;&lt;a href="http://www.microsoft.com/italy/nextweb/remix/keynote.aspx"&gt;http://www.microsoft.com/italy/nextweb/remix/keynote.aspx&lt;/a&gt; potete trovare tutti gli interventi del Remix 2010 di Milano. Per chi non avesse partecipato o chi volesse riviverlo vi auguro buona visione.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Ciao a presto,&lt;/p&gt;
&lt;p&gt;Alberto.&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/alberto/aggbug/462.aspx" width="1" height="1" /&gt;</description><dc:creator>Alberto De Luca</dc:creator></item><item><title>Evento tecnico a Belluno (&amp;ldquo;Community Tour&amp;rdquo;)</title><link>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/22/evento-tecnico-a-belluno-ldquocommunity-tourrdquo.aspx</link><pubDate>Thu, 22 Jul 2010 02:31:44 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto/archive/2010/07/22/evento-tecnico-a-belluno-ldquocommunity-tourrdquo.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto/comments/461.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto/comments/commentRss/461.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/22/evento-tecnico-a-belluno-ldquocommunity-tourrdquo.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto/services/trackbacks/461.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto/rss.aspx">Evento tecnico a Belluno (&amp;ldquo;Community Tour&amp;rdquo;)</source><description>&lt;p&gt;&lt;font size="2"&gt;Questo post per informarvi che sto organizzando un evento tecnico: il “&lt;strong&gt;&lt;font color="#008040"&gt;Community Tour” a Belluno&lt;/font&gt;&lt;/strong&gt;, con la collaborazione di &lt;strong&gt;Microsoft Italia&lt;/strong&gt;, delle Community tecniche &lt;strong&gt;XeDotNet&lt;/strong&gt; e &lt;strong&gt;DotNetWork&lt;/strong&gt; e dell’&lt;strong&gt;Ordine degli Ingegneri della Provincia di Belluno&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Dopo varie consultazioni, preventivi ecc. ecc., abbiamo definito la data di &lt;b&gt;&lt;font color="#008000"&gt;Venerdì 15 Ottobre 2010&lt;/font&gt;&lt;/b&gt;, soltanto al pomeriggio, presso la sala riunioni dell’Ordine degli Ingegneri della Provincia di Belluno, in centro a Belluno (Piazza Martiri n. 2, a fianco del Teatro Comunale, 4° piano). Mappa: &lt;/font&gt;&lt;a href="http://www.ordineingegneri.bl.it/main/sede.aspx"&gt;&lt;u&gt;&lt;font color="#0000ff" size="2"&gt;http://www.ordineingegneri.bl.it/main/sede.aspx&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;La sala ha una capienza di &lt;b&gt;40-45 persone&lt;/b&gt; e l’Ordine la mette a disposizione gratuitamente.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Ci saranno 3-4 sessioni di un’ora nel pomeriggio &lt;b&gt;dalle 14 alle 18.30&lt;/b&gt;, incentrate su &lt;b&gt;Visual Studio 2010&lt;/b&gt;, &lt;b&gt;Windows Azure&lt;/b&gt; e forse su &lt;b&gt;Windows Phone 7&lt;/b&gt;.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Appena possibile sarà aperta una pagina per le iscrizioni sul sito degli eventi di Microsoft Italia.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto/aggbug/461.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto</dc:creator></item><item><title>La clausola NOLOCK su una SELECT per velocizzare una query</title><link>http://community.dotnetwork.it/sabrina/archive/2010/07/20/la-clausola-nolock-su-una-select-per-velocizzare-una-query.aspx</link><pubDate>Tue, 20 Jul 2010 18:22:19 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/sabrina/archive/2010/07/20/la-clausola-nolock-su-una-select-per-velocizzare-una-query.aspx</guid><wfw:comment>http://community.dotnetwork.it/sabrina/comments/460.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/460.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/sabrina/archive/2010/07/20/la-clausola-nolock-su-una-select-per-velocizzare-una-query.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/sabrina/services/trackbacks/460.aspx</trackback:ping><source url="http://community.dotnetwork.it/sabrina/rss.aspx">La clausola NOLOCK su una SELECT per velocizzare una query</source><description>&lt;p&gt;Qualche giorno fa, il mio collega Luca stava verificando come ottimizzare una query complessa per ottenere una riduzione dei tempi di esecuzione, e consultando vari help, ha effettuato una serie di test. La clausola NOLOCK, aggiunta alle tabelle coinvolte nella query, velocizza notevolmente questo tipo di query. Leggendo i dati senza alcun tipo di blocco.  E’ chiaro che non è sempre applicabile, perché il fatto di non bloccare e quindi leggere i dati “come sono” nel momento della query, può portare a incongruenze se la tabella è una tabella modificata molto velocemente. Ma in casi in cui la tabella non ha variazioni molto rapide, nell’ordine di secondi o meno, oppure dove una fotografia momento per momento è comunque significativa, questa clausola aiuta a diminuire notevolmente i tempi di esecuzione.&lt;/p&gt;
&lt;p&gt;Ecco un esempio di query che usa la clausola:&lt;/p&gt;
&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; 
     au.[au_id]
    ,au.[au_lname]
    ,au.[au_fname]
    ,au.[phone]
    ,au.[address]
    ,au.[city]
    ,au.[&lt;span class="kwrd"&gt;state&lt;/span&gt;]
    ,au.[zip]
    ,au.[contract]
    ,ta.[au_ord]
    ,ta.[royaltyper]
    ,tt.[title]
    ,tt.[type]
    ,tt.[pub_id]
    ,tt.[price]
    ,tt.[advance]
    ,tt.[royalty]
    ,tt.[ytd_sales]
    ,tt.[notes]
    ,tt.[pubdate]
    &lt;span class="kwrd"&gt;FROM&lt;/span&gt; 
        [pubs].[dbo].[authors] au (NOLOCK)
    &lt;span class="kwrd"&gt;Left&lt;/span&gt; &lt;span class="kwrd"&gt;outer&lt;/span&gt; &lt;span class="kwrd"&gt;join&lt;/span&gt;
        [pubs].[dbo].[titleauthor] ta (NOLOCK)
    &lt;span class="kwrd"&gt;ON&lt;/span&gt;
        au.au_id = ta.au_id
    &lt;span class="kwrd"&gt;Left&lt;/span&gt; &lt;span class="kwrd"&gt;outer&lt;/span&gt; &lt;span class="kwrd"&gt;join&lt;/span&gt;
        [pubs].[dbo].[titles] tt (NOLOCK)
    &lt;span class="kwrd"&gt;ON&lt;/span&gt;
        ta.title_id = tt.title_id 
    &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt;
        au.au_id&lt;/pre&gt;
&lt;div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/SQL/default.aspx"&gt;SQL&lt;/a&gt;, &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/Row_Numbering/default.aspx"&gt;Row_Numbering&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/460.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>[VS 2010] I tool di Silverlight 4 in italiano</title><link>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/19/vs-2010-i-tool-di-silverlight-4-in-italiano.aspx</link><pubDate>Mon, 19 Jul 2010 03:11:12 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto/archive/2010/07/19/vs-2010-i-tool-di-silverlight-4-in-italiano.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto/comments/458.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto/comments/commentRss/458.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto/archive/2010/07/19/vs-2010-i-tool-di-silverlight-4-in-italiano.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto/services/trackbacks/458.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto/rss.aspx">[VS 2010] I tool di Silverlight 4 in italiano</source><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;Qualche giorno fa sono usciti i tool di Silverlight 4 per Visual Studio 2010 in italiano.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;La pagina di download &lt;/font&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=40ef0f31-cb95-426d-9ce0-00dcfabf3df5" target="_blank"&gt;&lt;strong&gt;&lt;font color="#0000ff" size="3"&gt;è questa&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;font size="3"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto/aggbug/458.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto</dc:creator></item><item><title>How to read the Nth record of a table in SQL Server</title><link>http://community.dotnetwork.it/Excentric/archive/2010/07/14/how-to-read-the-nth-record-of-a-table-in.aspx</link><pubDate>Wed, 14 Jul 2010 13:08:35 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/Excentric/archive/2010/07/14/how-to-read-the-nth-record-of-a-table-in.aspx</guid><wfw:comment>http://community.dotnetwork.it/Excentric/comments/457.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/Excentric/comments/commentRss/457.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/Excentric/archive/2010/07/14/how-to-read-the-nth-record-of-a-table-in.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/Excentric/services/trackbacks/457.aspx</trackback:ping><source url="http://community.dotnetwork.it/Excentric/rss.aspx">How to read the Nth record of a table in SQL Server</source><description>&lt;p&gt;Following a question made me by another developer, I write here (mostly to remember it) how to read a specific row in a table using an arbitrary ordering method.&lt;/p&gt;  &lt;p&gt;In TSQL we have just the SELECT TOP to decide a number of records to read but to get the Nth row of a table from the SQL 2005 version we have a nice function called ROW_NUMBER. I’ve used the dear old Pubs database coming as case study with SQL until version 2000.&lt;/p&gt;  &lt;p&gt;This is how to build the query, to number the Authors table:&lt;/p&gt;  &lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; [au_id]
      ,[au_lname]
      ,[au_fname]
      ,[phone]
      ,[address]
      ,[city]
      ,[&lt;span class="kwrd"&gt;state&lt;/span&gt;]
      ,[zip]
      ,[contract]
      ,[brthdate]
    , row_number() &lt;span class="kwrd"&gt;over&lt;/span&gt;( &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; au_lname) &lt;span class="kwrd"&gt;as&lt;/span&gt; rnum
  &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [pubs].[dbo].[authors]&lt;/pre&gt;

&lt;p&gt;The rnum column, contains a progressive numbering for the rows based on the author last name. Using Row_Number we can also number groups of rows, for instance:&lt;/p&gt;

&lt;pre class="TsqlFormat"&gt;    , Row_Number() &lt;span class="kwrd"&gt;Over&lt;/span&gt;(partition &lt;span class="kwrd"&gt;by&lt;/span&gt; [&lt;span class="kwrd"&gt;state&lt;/span&gt;] &lt;span class="kwrd"&gt;Order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; [&lt;span class="kwrd"&gt;state&lt;/span&gt;]) &lt;span class="kwrd"&gt;as&lt;/span&gt; RNum&lt;/pre&gt;

&lt;p&gt;With this syntax we get rows numbered from 1 to n for each state in the list.&lt;/p&gt;

&lt;p&gt;To get the Nth record, however, we have to surround our query with another one like in the code below:&lt;/p&gt;

&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; (
&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; [au_id]
      ,[au_lname]
      ,[au_fname]
      ,[phone]
      ,[address]
      ,[city]
      ,[&lt;span class="kwrd"&gt;state&lt;/span&gt;]
      ,[zip]
      ,[contract]
      ,[brthdate]
    , row_number() &lt;span class="kwrd"&gt;over&lt;/span&gt;( &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; au_lname) &lt;span class="kwrd"&gt;as&lt;/span&gt; rnum
  &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [pubs].[dbo].[authors]) aut
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; aut.rnum = 15&lt;/pre&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0c70757d-d49f-4bf5-a5dc-ed794a1f6484" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/SQL/default.aspx" rel="tag"&gt;SQL&lt;/a&gt;, &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/Row_Numbering/default.aspx" rel="tag"&gt;Row_Numbering&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/Excentric/aggbug/457.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>Come leggere l&amp;rsquo;ennesimo record di una tabella in SQL Server</title><link>http://community.dotnetwork.it/sabrina/archive/2010/07/14/come-leggere-lrsquoennesimo-record-di-una-tabella-in-sql-server.aspx</link><pubDate>Wed, 14 Jul 2010 11:58:58 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/sabrina/archive/2010/07/14/come-leggere-lrsquoennesimo-record-di-una-tabella-in-sql-server.aspx</guid><wfw:comment>http://community.dotnetwork.it/sabrina/comments/456.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/456.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/sabrina/archive/2010/07/14/come-leggere-lrsquoennesimo-record-di-una-tabella-in-sql-server.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/sabrina/services/trackbacks/456.aspx</trackback:ping><source url="http://community.dotnetwork.it/sabrina/rss.aspx">Come leggere l&amp;rsquo;ennesimo record di una tabella in SQL Server</source><description>&lt;p&gt;A seguito di una domanda postami, scrivo qui, al solito anche per ricordarmelo, come si fa a leggere una specifica riga di una tabella in base ad un arbitrario ordinamento.&lt;/p&gt;
&lt;p&gt;Esistendo solo la clausola SELECT TOP non è sempre possibile farlo, ma dalla versione 2005 di SQL Server esiste la funzione Row_Number, che può darci una mano in questo caso. Il test l’ho fatto sulla tabella Authors del famigerato ed antico db di test Pubs, fornito con SQL Server fino alla versione 2000.&lt;/p&gt;
&lt;p&gt;Ecco come impostare la query:&lt;/p&gt;
&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; [au_id]
      ,[au_lname]
      ,[au_fname]
      ,[phone]
      ,[address]
      ,[city]
      ,[&lt;span class="kwrd"&gt;state&lt;/span&gt;]
      ,[zip]
      ,[contract]
      ,[brthdate]
    , row_number() &lt;span class="kwrd"&gt;over&lt;/span&gt;( &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; au_lname) &lt;span class="kwrd"&gt;as&lt;/span&gt; rnum
  &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [pubs].[dbo].[authors]&lt;/pre&gt;
&lt;p&gt;In questo caso, Otteniamo la colonna rnum che contiene un contatore che numera le righe della tabella in ordine di Cognome, volendo, questa funzione ci permette anche di numerare le righe per gruppi, ovvero, se sostituiamo la riga di Row_Number con questa:&lt;/p&gt;
&lt;pre class="TsqlFormat"&gt;    , row_number() &lt;span class="kwrd"&gt;over&lt;/span&gt;(partition &lt;span class="kwrd"&gt;by&lt;/span&gt; [&lt;span class="kwrd"&gt;state&lt;/span&gt;] &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; [&lt;span class="kwrd"&gt;state&lt;/span&gt;]) &lt;span class="kwrd"&gt;as&lt;/span&gt; rnum&lt;/pre&gt;
&lt;p&gt;Otteniamo che i nostri autori sono numerati da 1 a n per ognuno degli stati presenti.&lt;/p&gt;
&lt;p&gt;Fatta questa query è necessario incapsularla in una seconda select per poter ottenere la riga che ci interessa. &lt;/p&gt;
&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; (
&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; [au_id]
      ,[au_lname]
      ,[au_fname]
      ,[phone]
      ,[address]
      ,[city]
      ,[&lt;span class="kwrd"&gt;state&lt;/span&gt;]
      ,[zip]
      ,[contract]
      ,[brthdate]
    , row_number() &lt;span class="kwrd"&gt;over&lt;/span&gt;( &lt;span class="kwrd"&gt;order&lt;/span&gt; &lt;span class="kwrd"&gt;by&lt;/span&gt; au_lname) &lt;span class="kwrd"&gt;as&lt;/span&gt; rnum
  &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [pubs].[dbo].[authors]) aut
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; aut.rnum = 15&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;&lt;div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0c70757d-d49f-4bf5-a5dc-ed794a1f6484" class="wlWriterEditableSmartContent"&gt;In questo caso otteniamo il quindicesimo record in ordine di cognome, cambiando la clausola order by possiamo decidere di  leggere il dodicesimo in ordine di numero telefonico, o di codice contratto e così via.&lt;/div&gt;

&lt;p&gt;
&lt;/p&gt;&lt;div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/SQL/default.aspx"&gt;SQL&lt;/a&gt;, &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/Row_Numbering/default.aspx"&gt;Row_Numbering&lt;/a&gt;&lt;/div&gt;
&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/456.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>SQL Server Update a Table with values selected from another table</title><link>http://community.dotnetwork.it/Excentric/archive/2010/07/12/sql-server-update-a-table-with-values-selected-from-another.aspx</link><pubDate>Mon, 12 Jul 2010 14:40:51 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/Excentric/archive/2010/07/12/sql-server-update-a-table-with-values-selected-from-another.aspx</guid><wfw:comment>http://community.dotnetwork.it/Excentric/comments/455.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/Excentric/comments/commentRss/455.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/Excentric/archive/2010/07/12/sql-server-update-a-table-with-values-selected-from-another.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/Excentric/services/trackbacks/455.aspx</trackback:ping><source url="http://community.dotnetwork.it/Excentric/rss.aspx">SQL Server Update a Table with values selected from another table</source><description>&lt;p&gt;Today, on another step of the job started with the last post, I had the following problem, I created a table with some informations and I needed to add more informations taken from other tables.&lt;/p&gt;  &lt;p&gt;A an Example, I created an inventory table, with Article Code, Description, Quantity, to create it I used an INSERT query from the Articles table, then the users of my system inserted the Inventory values and now I need to add Sales Price and Cost of every article, reading them from the PriceList.&lt;/p&gt;  &lt;p&gt;For Simplicity my tables are as follows:&lt;/p&gt;  &lt;pre class="TsqlFormat"&gt;TbInventory
   IDInventory &lt;span class="kwrd"&gt;int&lt;/span&gt;
   IDArticle nvarchar(32)
   Quantity &lt;span class="kwrd"&gt;decimal&lt;/span&gt;(18,5)
   Price &lt;span class="kwrd"&gt;decimal&lt;/span&gt;(18,5)
   Cost &lt;span class="kwrd"&gt;decimal&lt;/span&gt;(18,5)

TbListini
   IDPricelist &lt;span class="kwrd"&gt;int&lt;/span&gt;
   IDarticle nvarchar(32)
   Price &lt;span class="kwrd"&gt;decimal&lt;/span&gt;(18,5)
   Cost &lt;span class="kwrd"&gt;decimal&lt;/span&gt; (18,5)&lt;/pre&gt;

&lt;p&gt;To update price and cost I’lluse, an Update query, with a Join.&lt;/p&gt;

&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;UPDATE&lt;/span&gt; TbInventory
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; Price = isnull(lis.Price,0)
      , Cost = isnull(lis.Cost,0)
&lt;span class="kwrd"&gt;FROM&lt;/span&gt; TbInventory inv
&lt;span class="kwrd"&gt;INNER&lt;/span&gt; &lt;span class="kwrd"&gt;JOIN&lt;/span&gt;
    TbPriceList lis
&lt;span class="kwrd"&gt;ON&lt;/span&gt;
  inv.IDArticle = lis.IDArticle  &lt;/pre&gt;

&lt;p&gt;This way, I’m setting a relation between the two tables usin ga JOIN thenI update the Inventory Table with The Price List values.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:31d404cd-266b-40d3-9641-90ce40ff82aa" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/SQL/default.aspx" rel="tag"&gt;SQL&lt;/a&gt;, &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/UPDATE/default.aspx" rel="tag"&gt;UPDATE&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/Excentric/aggbug/455.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>SQL Server Aggiornare una tabella con i valori di un&amp;rsquo;altra tabella</title><link>http://community.dotnetwork.it/sabrina/archive/2010/07/12/sql-server-aggiornare-una-tabella-con-i-valori-di-unrsquoaltra.aspx</link><pubDate>Mon, 12 Jul 2010 14:22:15 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/sabrina/archive/2010/07/12/sql-server-aggiornare-una-tabella-con-i-valori-di-unrsquoaltra.aspx</guid><wfw:comment>http://community.dotnetwork.it/sabrina/comments/454.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/454.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/sabrina/archive/2010/07/12/sql-server-aggiornare-una-tabella-con-i-valori-di-unrsquoaltra.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/sabrina/services/trackbacks/454.aspx</trackback:ping><source url="http://community.dotnetwork.it/sabrina/rss.aspx">SQL Server Aggiornare una tabella con i valori di un&amp;rsquo;altra tabella</source><description>&lt;p&gt;Oggi, proseguendo il lavoro relativo al post precedente, mi si è presentata la seguente necessità,  Creata una tabella contenente alcune informazioni, avevo la necessità di aggiornare le informazioni su questa tabella usando i dati contenuti su un’altra tabella.&lt;/p&gt;  &lt;p&gt;Esempio: Ho creato una tabella inventari, contenente Codice Articolo, descrizione, quantità, per crearla ho utilizzato una query di insert dalla tabella articoli di magazzino, ora gli utenti hanno compilato le giacenze, ed io devo aggiungere ultimo costo ed ultimo prezzo leggendoli dalla tabella listini.&lt;/p&gt;  &lt;p&gt;Per semplicità, le mie tabelle sono le seguenti:&lt;/p&gt;  &lt;pre class="TsqlFormat"&gt;TbInventari
   IDInventario &lt;span class="kwrd"&gt;int&lt;/span&gt;
   IDArticolo nvarchar(32)
   Quantita &lt;span class="kwrd"&gt;decimal&lt;/span&gt;(18,5)
   Perzzo &lt;span class="kwrd"&gt;decimal&lt;/span&gt;(18,5)
   Costo &lt;span class="kwrd"&gt;decimal&lt;/span&gt;(18,5)

TbListini
   IDListino &lt;span class="kwrd"&gt;int&lt;/span&gt;
   IDarticolo nvarchar(32)
   Prezzo &lt;span class="kwrd"&gt;decimal&lt;/span&gt;(18,5)
   Costo &lt;span class="kwrd"&gt;decimal&lt;/span&gt; (18,5)&lt;/pre&gt;

&lt;p&gt;Per aggiornare il prezzo ed il costo sulla tabella inventari, utilizzo una query di Update, con una Join.&lt;/p&gt;

&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;UPDATE&lt;/span&gt; TbInventari
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; Prezzo = isnull(lis.Prezzo,0)
      , Costo = isnull(lis.Costo,0)
&lt;span class="kwrd"&gt;FROM&lt;/span&gt; TbInventari inv
&lt;span class="kwrd"&gt;INNER&lt;/span&gt; &lt;span class="kwrd"&gt;JOIN&lt;/span&gt;
    TbListini lis
&lt;span class="kwrd"&gt;ON&lt;/span&gt;
  inv.IDArticolo = lis.IDArticolo  &lt;/pre&gt;

&lt;p&gt;In questo modo, metto in relazione le due tabelle utilizzando la JOIN poi aggiorno la tabella Inventari con i Valori della tabella listini.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:31d404cd-266b-40d3-9641-90ce40ff82aa" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/SQL/default.aspx" rel="tag"&gt;SQL&lt;/a&gt;, &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/UPDATE/default.aspx" rel="tag"&gt;UPDATE&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/454.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>Use of Rank function to extract a list of rows with the highest date</title><link>http://community.dotnetwork.it/Excentric/archive/2010/07/07/use-of-rank-function-to-extract-a-list-of-rows.aspx</link><pubDate>Wed, 07 Jul 2010 19:45:13 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/Excentric/archive/2010/07/07/use-of-rank-function-to-extract-a-list-of-rows.aspx</guid><wfw:comment>http://community.dotnetwork.it/Excentric/comments/453.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/Excentric/comments/commentRss/453.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/Excentric/archive/2010/07/07/use-of-rank-function-to-extract-a-list-of-rows.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/Excentric/services/trackbacks/453.aspx</trackback:ping><source url="http://community.dotnetwork.it/Excentric/rss.aspx">Use of Rank function to extract a list of rows with the highest date</source><description>&lt;p&gt;Today I had the problem to create a query to get the most recent price from a pricelists table. Every pricelist in the table can contain the same article any number of times with different startup dates. I made some search to find a way to obtain what i needed and I found the RANK function, it was used in a similar scenario. I publish this post as usual to remember how to use this function next time I need it and in the hope to help someone else solving similar problems.&lt;/p&gt;  &lt;p&gt;The table:&lt;/p&gt;  &lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; [dbo].[TbPricelistsRg](
    [IDPriceListRg] [&lt;span class="kwrd"&gt;int&lt;/span&gt;] &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [IDPriceList] [nvarchar](10) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [IDArticle] [nvarchar](32) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [Price] [&lt;span class="kwrd"&gt;decimal&lt;/span&gt;](18, 5) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [StartDate] [&lt;span class="kwrd"&gt;date&lt;/span&gt;] &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
 &lt;span class="kwrd"&gt;CONSTRAINT&lt;/span&gt; [PK_TbPriceListsRg] &lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt; &lt;span class="kwrd"&gt;KEY&lt;/span&gt; &lt;span class="kwrd"&gt;CLUSTERED&lt;/span&gt; 
(
    [IDPriceListRg] &lt;span class="kwrd"&gt;ASC&lt;/span&gt;
)&lt;span class="kwrd"&gt;WITH&lt;/span&gt; (PAD_INDEX  = &lt;span class="kwrd"&gt;OFF&lt;/span&gt;, STATISTICS_NORECOMPUTE  = &lt;span class="kwrd"&gt;OFF&lt;/span&gt;, IGNORE_DUP_KEY = &lt;span class="kwrd"&gt;OFF&lt;/span&gt;, ALLOW_ROW_LOCKS  &lt;br /&gt;     = &lt;span class="kwrd"&gt;ON&lt;/span&gt;, ALLOW_PAGE_LOCKS  = &lt;span class="kwrd"&gt;ON&lt;/span&gt;) &lt;span class="kwrd"&gt;ON&lt;/span&gt; [&lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt;]
) &lt;span class="kwrd"&gt;ON&lt;/span&gt; [&lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt;]&lt;/pre&gt;

&lt;p&gt;Every row is linked to a PriceList through the IDPriceLIst field, we don’t need to use it for the example so it is omitted.&lt;/p&gt;

&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbPricelistsRg]
           ([IDPriceList]
           ,[IDArticle]
           ,[Price]
           ,[StartDate])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'ABC'&lt;/span&gt;
           ,10
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbPricelistsRg]
           ([IDPriceList]
           ,[IDArticle]
           ,[Price]
           ,[StartDate])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'OCQ'&lt;/span&gt;
           ,14
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbPricelistsRg]
           ([IDPriceList]
           ,[IDArticle]
           ,[Price]
           ,[StartDate])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'FYS'&lt;/span&gt;
           ,21
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbPricelistsRg]
           ([IDPriceList]
           ,[IDArticle]
           ,[Price]
           ,[StartDate])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'MUI'&lt;/span&gt;
           ,13
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbPricelistsRg]
           ([IDPriceList]
           ,[IDArticle]
           ,[Price]
           ,[StartDate])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'SIO'&lt;/span&gt;
           ,42
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbPricelistsRg]
           ([IDPriceList]
           ,[IDArticle]
           ,[Price]
           ,[StartDate])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'GOU'&lt;/span&gt;
           ,18
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbPricelistsRg]
           ([IDPriceList]
           ,[IDArticle]
           ,[Price]
           ,[StartDate])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'HOU'&lt;/span&gt;
           ,20
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The previous script inserts some articles, we can repeat it changing the PriceLIst, the Dates and prices to be able to show how the query meets our needs.&lt;/p&gt;

&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; [IDPriceListRg]
      ,[IDPriceList]
      ,[IDArticle]
      ,[Price]
      ,[StartDate]
      ,RANK() &lt;span class="kwrd"&gt;OVER&lt;/span&gt; (PARTITION &lt;span class="kwrd"&gt;BY&lt;/span&gt; IDPriceList, IDArticle &lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; StartDate &lt;span class="kwrd"&gt;DESC&lt;/span&gt;) DATERANK
  &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [paperinik].[dbo].[TbPricelistsRg]&lt;/pre&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&lt;font color="#0080ff"&gt;RANK&lt;/font&gt;&lt;/strong&gt; function, allows us to indicate one or more grouping fields on which calculate ranking, this is done using the &lt;strong&gt;&lt;font color="#0080ff"&gt;PARTITION BY&lt;/font&gt;&lt;/strong&gt; keywords, in our query we indicate the two fields on which ranking has to break. The &lt;font color="#0080ff"&gt;&lt;strong&gt;ORDER BY&lt;/strong&gt;&lt;/font&gt;  keyword, instead indicates on which field we have to measure ranking. while the &lt;font color="#0080ff"&gt;&lt;strong&gt;DESC&lt;/strong&gt;&lt;/font&gt; keywords tells that we want to start from the most recent date..&lt;/p&gt;

&lt;p&gt;This is the result of our query.&lt;/p&gt;

&lt;table style="width: 296pt; border-collapse: collapse" border="0" cellspacing="0" cellpadding="0" width="395"&gt;&lt;colgroup&gt;&lt;col style="width: 48pt" width="64" /&gt;&lt;col style="width: 56pt; mso-width-source: userset; mso-width-alt: 2742" width="75" /&gt;&lt;col style="width: 48pt" width="64" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;
    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="width: 48pt; height: 15pt" height="20" width="64"&gt;IDListinoRg&lt;/td&gt;

      &lt;td style="width: 48pt" width="64"&gt;IDListino&lt;/td&gt;

      &lt;td style="width: 48pt" width="64"&gt;IDArticolo&lt;/td&gt;

      &lt;td style="width: 48pt" width="64"&gt;Prezzo&lt;/td&gt;

      &lt;td style="width: 56pt" width="75"&gt;ValidoDal&lt;/td&gt;

      &lt;td style="width: 48pt" width="64"&gt;DATERANK&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;107&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;24/10/2010&lt;/td&gt;

      &lt;td align="right"&gt;1&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;86&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;15/05/2010&lt;/td&gt;

      &lt;td align="right"&gt;2&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;65&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/01/2010&lt;/td&gt;

      &lt;td align="right"&gt;3&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;44&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/09/2009&lt;/td&gt;

      &lt;td align="right"&gt;4&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;23&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;16/04/2009&lt;/td&gt;

      &lt;td align="right"&gt;5&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;1&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;05/01/2008&lt;/td&gt;

      &lt;td align="right"&gt;6&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;2&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;05/01/2008&lt;/td&gt;

      &lt;td align="right"&gt;6&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;109&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;24/10/2010&lt;/td&gt;

      &lt;td align="right"&gt;1&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;88&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;15/05/2010&lt;/td&gt;

      &lt;td align="right"&gt;2&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;67&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/01/2010&lt;/td&gt;

      &lt;td align="right"&gt;3&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;46&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/09/2009&lt;/td&gt;

      &lt;td align="right"&gt;4&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;25&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;16/04/2009&lt;/td&gt;

      &lt;td align="right"&gt;5&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;4&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;05/01/2008&lt;/td&gt;

      &lt;td align="right"&gt;6&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;112&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;24/10/2010&lt;/td&gt;

      &lt;td align="right"&gt;1&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;91&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;15/05/2010&lt;/td&gt;

      &lt;td align="right"&gt;2&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;70&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/01/2010&lt;/td&gt;

      &lt;td align="right"&gt;3&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;49&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/09/2009&lt;/td&gt;

      &lt;td align="right"&gt;4&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;28&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;16/04/2009&lt;/td&gt;

      &lt;td align="right"&gt;5&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;7&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;05/01/2008&lt;/td&gt;

      &lt;td align="right"&gt;6&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;113&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;24/10/2010&lt;/td&gt;

      &lt;td align="right"&gt;1&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;92&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;15/05/2010&lt;/td&gt;

      &lt;td align="right"&gt;2&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;71&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/01/2010&lt;/td&gt;

      &lt;td align="right"&gt;3&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;50&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/09/2009&lt;/td&gt;

      &lt;td align="right"&gt;4&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;29&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;16/04/2009&lt;/td&gt;

      &lt;td align="right"&gt;5&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;8&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;05/01/2008&lt;/td&gt;

      &lt;td align="right"&gt;6&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;So to obtain the most recent prices, we need just to add a filter on DATERANK = 1, and to obtain the less recent price we just need to delete the DESC keyword and filter on rank 1.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:27b8a83b-f846-404d-ae0f-c3a2d70793b7" class="wlWriterEditableSmartContent"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/SQL" rel="tag"&gt;SQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/RANK" rel="tag"&gt;RANK&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DATE" rel="tag"&gt;DATE&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/Excentric/aggbug/453.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>Usare la funzione Rank per estrarre una lista di righe con la data pi&amp;ugrave; alta</title><link>http://community.dotnetwork.it/sabrina/archive/2010/07/07/usare-la-funzione-rank-per-estrarre-una-lista-di-righe.aspx</link><pubDate>Wed, 07 Jul 2010 19:18:04 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/sabrina/archive/2010/07/07/usare-la-funzione-rank-per-estrarre-una-lista-di-righe.aspx</guid><wfw:comment>http://community.dotnetwork.it/sabrina/comments/452.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/452.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/sabrina/archive/2010/07/07/usare-la-funzione-rank-per-estrarre-una-lista-di-righe.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/sabrina/services/trackbacks/452.aspx</trackback:ping><source url="http://community.dotnetwork.it/sabrina/rss.aspx">Usare la funzione Rank per estrarre una lista di righe con la data pi&amp;ugrave; alta</source><description>&lt;p&gt;Oggi avevo il problema di dover creare una query che mi restituisse il prezzo più recente contenuto in una tabella listini. Ogni listino può contenere gli stessi articoli ripetuti più volte, ciascuna riga con una data di validità diversa. Ho fatto qualche ricerca in merito ed ho trovato la funzione RANK, usata in un caso simile, pubblico quindi un esempio in modo da ricordarmi come fare quando mi servirà di nuovo e ovviamente dare a chi legge un suggerimento per risolvere simili problemi.&lt;/p&gt;  &lt;p&gt;La tabella:&lt;/p&gt;  &lt;pre class="TsqlFormat"&gt;
&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; [dbo].[TbListiniRg](
    [IDListinoRg] [&lt;span class="kwrd"&gt;int&lt;/span&gt;] &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [IDListino] [nvarchar](10) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [IDArticolo] [nvarchar](32) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [Prezzo] [&lt;span class="kwrd"&gt;decimal&lt;/span&gt;](18, 5) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [ValidoDal] [&lt;span class="kwrd"&gt;date&lt;/span&gt;] &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
 &lt;span class="kwrd"&gt;CONSTRAINT&lt;/span&gt; [PK_TbListiniRg] &lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt; &lt;span class="kwrd"&gt;KEY&lt;/span&gt; &lt;span class="kwrd"&gt;CLUSTERED&lt;/span&gt; 
(
    [IDListinoRg] &lt;span class="kwrd"&gt;ASC&lt;/span&gt;
)&lt;span class="kwrd"&gt;WITH&lt;/span&gt; (PAD_INDEX  = &lt;span class="kwrd"&gt;OFF&lt;/span&gt;, STATISTICS_NORECOMPUTE  = &lt;span class="kwrd"&gt;OFF&lt;/span&gt;, IGNORE_DUP_KEY = &lt;span class="kwrd"&gt;OFF&lt;/span&gt;, ALLOW_ROW_LOCKS  &lt;br /&gt;     = &lt;span class="kwrd"&gt;ON&lt;/span&gt;, ALLOW_PAGE_LOCKS  = &lt;span class="kwrd"&gt;ON&lt;/span&gt;) &lt;span class="kwrd"&gt;ON&lt;/span&gt; [&lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt;]
) &lt;span class="kwrd"&gt;ON&lt;/span&gt; [&lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt;]&lt;/pre&gt;

&lt;p&gt;Ogni riga è collegata al listino tramite IDListino, la tabella listini non ci serve quindi è stata omessa.&lt;/p&gt;

&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbListiniRg]
           ([IDListino]
           ,[IDArticolo]
           ,[Prezzo]
           ,[ValidoDal])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'ABC'&lt;/span&gt;
           ,10
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbListiniRg]
           ([IDListino]
           ,[IDArticolo]
           ,[Prezzo]
           ,[ValidoDal])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'OCQ'&lt;/span&gt;
           ,14
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbListiniRg]
           ([IDListino]
           ,[IDArticolo]
           ,[Prezzo]
           ,[ValidoDal])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'FYS'&lt;/span&gt;
           ,21
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbListiniRg]
           ([IDListino]
           ,[IDArticolo]
           ,[Prezzo]
           ,[ValidoDal])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'MUI'&lt;/span&gt;
           ,13
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbListiniRg]
           ([IDListino]
           ,[IDArticolo]
           ,[Prezzo]
           ,[ValidoDal])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'SIO'&lt;/span&gt;
           ,42
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbListiniRg]
           ([IDListino]
           ,[IDArticolo]
           ,[Prezzo]
           ,[ValidoDal])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'GOU'&lt;/span&gt;
           ,18
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[TbListiniRg]
           ([IDListino]
           ,[IDArticolo]
           ,[Prezzo]
           ,[ValidoDal])
     &lt;span class="kwrd"&gt;VALUES&lt;/span&gt;
           (&lt;span class="str"&gt;'CLD'&lt;/span&gt;
           ,&lt;span class="str"&gt;'HOU'&lt;/span&gt;
           ,20
           ,&lt;span class="kwrd"&gt;CONVERT&lt;/span&gt;(&lt;span class="kwrd"&gt;date&lt;/span&gt;, &lt;span class="str"&gt;'20080105'&lt;/span&gt;, 112))
&lt;span class="kwrd"&gt;GO&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Questo script inserisce alcuni articoli, ripetuto variando il codice listino, le date ed i prezzi ci permetterà di dimostrare la nostra funzionalità.&lt;/p&gt;

&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; [IDListinoRg]
      ,[IDListino]
      ,[IDArticolo]
      ,[Prezzo]
      ,[ValidoDal]
      ,RANK() &lt;span class="kwrd"&gt;OVER&lt;/span&gt; (PARTITION &lt;span class="kwrd"&gt;BY&lt;/span&gt; IDLISTINO, IDARTICOLO &lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; ValidoDal &lt;span class="kwrd"&gt;DESC&lt;/span&gt;) DATERANK
  &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [paperinik].[dbo].[TbListiniRg]&lt;/pre&gt;

&lt;p&gt;La funzione &lt;strong&gt;&lt;font color="#0080ff"&gt;RANK&lt;/font&gt;&lt;/strong&gt; ci permette di indicare uno o più campi di raggruppamento su cui il calcolo del Ranking viene effettuato,  usando la clausola &lt;strong&gt;&lt;font color="#0080ff"&gt;PARTITION BY&lt;/font&gt;&lt;/strong&gt;, ovvero su quali campi spezzare il calcolo del ranking in questo caso codice listino ed articolo. La clausola &lt;font color="#0080ff"&gt;&lt;strong&gt;ORDER BY&lt;/strong&gt;&lt;/font&gt; indica invece qual’è il campo su cui il Ranking viene misurato, mentre la clausola &lt;font color="#0080ff"&gt;&lt;strong&gt;DESC&lt;/strong&gt;&lt;/font&gt; dice che vogliamo andare dalla data più recente indietro.&lt;/p&gt;

&lt;p&gt;Questa query ci da questo risultato.&lt;/p&gt;

&lt;table style="width: 296pt; border-collapse: collapse" border="0" cellspacing="0" cellpadding="0" width="395"&gt;&lt;colgroup&gt;&lt;col style="width: 48pt" span="span" width="64" /&gt;&lt;col style="width: 56pt; mso-width-source: userset; mso-width-alt: 2742" width="75" /&gt;&lt;col style="width: 48pt" width="64" /&gt;&lt;/colgroup&gt;&lt;tbody&gt;
    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="width: 48pt; height: 15pt" height="20" width="64"&gt;IDListinoRg&lt;/td&gt;

      &lt;td style="width: 48pt" width="64"&gt;IDListino&lt;/td&gt;

      &lt;td style="width: 48pt" width="64"&gt;IDArticolo&lt;/td&gt;

      &lt;td style="width: 48pt" width="64"&gt;Prezzo&lt;/td&gt;

      &lt;td style="width: 56pt" width="75"&gt;ValidoDal&lt;/td&gt;

      &lt;td style="width: 48pt" width="64"&gt;DATERANK&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;107&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;24/10/2010&lt;/td&gt;

      &lt;td align="right"&gt;1&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;86&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;15/05/2010&lt;/td&gt;

      &lt;td align="right"&gt;2&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;65&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/01/2010&lt;/td&gt;

      &lt;td align="right"&gt;3&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;44&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/09/2009&lt;/td&gt;

      &lt;td align="right"&gt;4&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;23&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;16/04/2009&lt;/td&gt;

      &lt;td align="right"&gt;5&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;1&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;05/01/2008&lt;/td&gt;

      &lt;td align="right"&gt;6&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;2&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;ABC&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;05/01/2008&lt;/td&gt;

      &lt;td align="right"&gt;6&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;109&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;24/10/2010&lt;/td&gt;

      &lt;td align="right"&gt;1&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;88&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;15/05/2010&lt;/td&gt;

      &lt;td align="right"&gt;2&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;67&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/01/2010&lt;/td&gt;

      &lt;td align="right"&gt;3&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;46&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/09/2009&lt;/td&gt;

      &lt;td align="right"&gt;4&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;25&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;16/04/2009&lt;/td&gt;

      &lt;td align="right"&gt;5&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;4&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;FYS&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.100.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;05/01/2008&lt;/td&gt;

      &lt;td align="right"&gt;6&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;112&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;24/10/2010&lt;/td&gt;

      &lt;td align="right"&gt;1&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;91&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;15/05/2010&lt;/td&gt;

      &lt;td align="right"&gt;2&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;70&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/01/2010&lt;/td&gt;

      &lt;td align="right"&gt;3&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;49&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/09/2009&lt;/td&gt;

      &lt;td align="right"&gt;4&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;28&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;16/04/2009&lt;/td&gt;

      &lt;td align="right"&gt;5&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;7&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;GOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;1.800.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;05/01/2008&lt;/td&gt;

      &lt;td align="right"&gt;6&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;113&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;24/10/2010&lt;/td&gt;

      &lt;td align="right"&gt;1&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;92&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;15/05/2010&lt;/td&gt;

      &lt;td align="right"&gt;2&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;71&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/01/2010&lt;/td&gt;

      &lt;td align="right"&gt;3&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;50&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;08/09/2009&lt;/td&gt;

      &lt;td align="right"&gt;4&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;29&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;16/04/2009&lt;/td&gt;

      &lt;td align="right"&gt;5&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr style="height: 15pt" height="20"&gt;
      &lt;td style="height: 15pt" height="20" align="right"&gt;8&lt;/td&gt;

      &lt;td&gt;CLD&lt;/td&gt;

      &lt;td&gt;HOU&lt;/td&gt;

      &lt;td class="xl63" align="right"&gt;2.000.000&lt;/td&gt;

      &lt;td class="xl64" align="right"&gt;05/01/2008&lt;/td&gt;

      &lt;td align="right"&gt;6&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;Pertanto per poter vedere solo il prezzo più recente, ci basta un filtro sul DATERANK = 1, così come per avere la data meno recente ci basta togliere la clausola DESC dalla query.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:27b8a83b-f846-404d-ae0f-c3a2d70793b7" class="wlWriterEditableSmartContent"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/SQL" rel="tag"&gt;SQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/RANK" rel="tag"&gt;RANK&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DATE" rel="tag"&gt;DATE&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/452.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>DotNetWork: 3 anni di attività</title><link>http://community.dotnetwork.it/alberto/archive/2010/07/04/dotnetwork-3-anni-di-attivit%c3%a0.aspx</link><pubDate>Sun, 04 Jul 2010 14:38:10 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/alberto/archive/2010/07/04/dotnetwork-3-anni-di-attivit%c3%a0.aspx</guid><wfw:comment>http://community.dotnetwork.it/alberto/comments/451.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/alberto/comments/commentRss/451.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/alberto/archive/2010/07/04/dotnetwork-3-anni-di-attivit%c3%a0.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/alberto/services/trackbacks/451.aspx</trackback:ping><source url="http://community.dotnetwork.it/alberto/rss.aspx">DotNetWork: 3 anni di attività</source><description>&lt;p&gt;E' con grande piacere che festeggiamo oggi il III compleanno di &lt;a href="http://www.dotnetwork.it"&gt;DotNetWork.it&lt;/a&gt;, &lt;a href="http://community.dotnetwork.it/sabrina/Default.aspx"&gt;Sabrina&lt;/a&gt; ha pensato bene di rinnovare la grafica del portale riuscendo, come sempre, a dimostrare le sue grandi doti di disegnatrice. Gli iscritti in tutti questi anni sono stati oltre 800, abbiamo organizzato 5 meeting con un'ottima percentuale di partecipanti, i nostri forum sono sempre molto frequentati e non si sono mai create situazioni spiacevoli. Attualmente in Community abbiamo 2 MVP attivi e sono sicuro che altri ne arriveranno... che dire: davvero un bel bilancio!&lt;/p&gt;
&lt;p&gt;Con affetto,&lt;/p&gt;
&lt;p&gt;Alberto.&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/alberto/aggbug/451.aspx" width="1" height="1" /&gt;</description><dc:creator>Alberto De Luca</dc:creator></item><item><title>VS 2010: Errore .NET Framework 4.0 L'assembly in modalità mista è compilato in base alla versione 'v2.0.50727' del runtime e non può essere caricato nel runtime 4.0 senza ulteriori informazioni di configurazione.</title><link>http://community.dotnetwork.it/alberto/archive/2010/07/03/vs-2010-errore-.net-framework-4.0-lassembly-in-modalit%c3%a0-mista.aspx</link><pubDate>Sat, 03 Jul 2010 06:40:31 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/alberto/archive/2010/07/03/vs-2010-errore-.net-framework-4.0-lassembly-in-modalit%c3%a0-mista.aspx</guid><wfw:comment>http://community.dotnetwork.it/alberto/comments/450.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/alberto/comments/commentRss/450.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/alberto/archive/2010/07/03/vs-2010-errore-.net-framework-4.0-lassembly-in-modalit%c3%a0-mista.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/alberto/services/trackbacks/450.aspx</trackback:ping><source url="http://community.dotnetwork.it/alberto/rss.aspx">VS 2010: Errore .NET Framework 4.0 L'assembly in modalità mista è compilato in base alla versione 'v2.0.50727' del runtime e non può essere caricato nel runtime 4.0 senza ulteriori informazioni di configurazione.</source><description>&lt;p&gt;In alcuni casi, utilizzando librerie compilate per versioni precedenti in progetti .NET Framework 4.0 si può verificare  questo errore:&lt;/p&gt;
&lt;address&gt;&lt;span class="italic"&gt;L'assembly in modalità mista è compilato in base alla versione 'v2.0.50727' del runtime e non può essere caricato nel runtime 4.0 senza ulteriori informazioni di configurazione.&lt;/span&gt;&lt;/address&gt;
&lt;p&gt;&lt;span class="italic"&gt;Per risolvere questo problema è necessario aggiungere un attributo nel file config della propria applicazione:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="tag"&gt;&lt;font color="#993300"&gt;&amp;lt;configuration&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="#993300"&gt;&lt;span class="pln"&gt; &lt;br /&gt;
  &lt;/span&gt;&lt;span class="tag"&gt;&amp;lt;startup&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;font style="BACKGROUND-COLOR: #ffff99"&gt;&lt;span class="atn"&gt;&lt;font color="#ff0000"&gt;useLegacyV2RuntimeActivationPolicy&lt;/font&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;/span&gt;&lt;span class="atv"&gt;&lt;font color="#0000ff"&gt;"true"&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span class="tag"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#993300"&gt;&lt;span class="pln"&gt; &lt;br /&gt;
    &lt;/span&gt;&lt;span class="tag"&gt;&amp;lt;supportedRuntime&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="atn"&gt;&lt;font color="#ff0000"&gt;version&lt;/font&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;font color="#000000"&gt;=&lt;/font&gt;&lt;/span&gt;&lt;span class="atv"&gt;&lt;font color="#0000ff"&gt;"v4.0"&lt;/font&gt;&lt;/span&gt;&lt;span class="tag"&gt;/&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#993300"&gt;&lt;span class="pln"&gt; &lt;br /&gt;
  &lt;/span&gt;&lt;span class="tag"&gt;&amp;lt;/startup&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#993300"&gt;&lt;span class="pln"&gt; &lt;br /&gt;
&lt;/span&gt;&lt;span class="tag"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;span class="pln"&gt;&lt;font color="#993300"&gt; &lt;/font&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;&lt;span class="bold"&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;&lt;font color="#000000" face="Verdana"&gt;Per ulteriori informazioni sull'utilizzo di questo attributo:&lt;/font&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;&lt;span class="bold"&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;&lt;font face=""&gt;&lt;a href="http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx"&gt;http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;
&lt;p&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;&lt;span class="bold"&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;&lt;font face="Verdana"&gt;Saluti,&lt;/font&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;&lt;span class="bold"&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;&lt;font face="Verdana"&gt;Alberto&lt;/font&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;
&lt;p&gt;&lt;span class="italic"&gt;&lt;code&gt;&lt;span class="pln"&gt;&lt;font color="#993300"&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/alberto/aggbug/450.aspx" width="1" height="1" /&gt;</description><dc:creator>Alberto De Luca</dc:creator></item><item><title>Una piccola utility per le Enumerazioni</title><link>http://community.dotnetwork.it/sabrina/archive/2010/07/01/una-piccola-utility-per-le-enumerazioni.aspx</link><pubDate>Thu, 01 Jul 2010 05:58:54 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/sabrina/archive/2010/07/01/una-piccola-utility-per-le-enumerazioni.aspx</guid><wfw:comment>http://community.dotnetwork.it/sabrina/comments/449.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/449.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/sabrina/archive/2010/07/01/una-piccola-utility-per-le-enumerazioni.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/sabrina/services/trackbacks/449.aspx</trackback:ping><source url="http://community.dotnetwork.it/sabrina/rss.aspx">Una piccola utility per le Enumerazioni</source><description>&lt;p&gt;Spesso può capitare che sia necessario sapere quali sono i valori di una enumerazione, soprattutto quelle di sistema e guardacaso, sulla descrizione delle classi nell’help, le enumerazioni vengono descritte con i loro nomi ma difficilmente con i valori numerici.&lt;/p&gt;  &lt;p&gt;Oggi a me serviva sapere quali erano i valori di CharacterCasing, per un problema di reference, pertanto ho scritto un minuscolo programmino Winforms, per visualizzarle. Ovviamente il mio esempio visualizza 2 enumerazioni, potete aggiungere il necessario a visualizzare tutte quelle che volete.&lt;/p&gt;  &lt;pre class="CSharpFormat"&gt;        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnCharacterCasing_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            &lt;span class="kwrd"&gt;int&lt;/span&gt;[] values = (&lt;span class="kwrd"&gt;int&lt;/span&gt;[])Enum.GetValues(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(CharacterCasing));
            &lt;span class="kwrd"&gt;string&lt;/span&gt;[] names = Enum.GetNames(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(CharacterCasing));
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.txtResult.Text = &lt;span class="str"&gt;"CharacterCasing"&lt;/span&gt; + Environment.NewLine;
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; names.Length; i++)
            {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;.txtResult.Text += &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0} = {1}"&lt;/span&gt;, names[i], values[i]) + Environment.NewLine;
            }

        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; btnDialogResult_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            &lt;span class="kwrd"&gt;int&lt;/span&gt;[] values = (&lt;span class="kwrd"&gt;int&lt;/span&gt;[])Enum.GetValues(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DialogResult));
            &lt;span class="kwrd"&gt;string&lt;/span&gt;[] names = Enum.GetNames(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(DialogResult));
            &lt;span class="kwrd"&gt;this&lt;/span&gt;.txtResult.Text = &lt;span class="str"&gt;"DialogResult"&lt;/span&gt; + Environment.NewLine;
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; names.Length; i++)
            {
                &lt;span class="kwrd"&gt;this&lt;/span&gt;.txtResult.Text += &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0} = {1}"&lt;/span&gt;, names[i], values[i]) + Environment.NewLine;
            }

        }&lt;/pre&gt;

&lt;p&gt;Ecco il codice dietro la form&lt;/p&gt;

&lt;table border="0" cellspacing="2" cellpadding="0" width="763"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="383"&gt;
        &lt;p align="center"&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/UnapiccolautilityperleEnumerazioni_8C59/showEnums01_2.jpg" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="showEnums01" border="0" alt="showEnums01" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/UnapiccolautilityperleEnumerazioni_8C59/showEnums01_thumb.jpg" width="244" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;
      &lt;/td&gt;

      &lt;td valign="top" width="372"&gt;
        &lt;p align="center"&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/UnapiccolautilityperleEnumerazioni_8C59/showenums02_2.jpg" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="showenums02" border="0" alt="showenums02" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/UnapiccolautilityperleEnumerazioni_8C59/showenums02_thumb.jpg" width="244" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Ed il risultato finale.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ed6ecfb0-6e74-4b99-833d-7cfd8fc06fca" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/Enum/default.aspx" rel="tag"&gt;Enum&lt;/a&gt;, &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/Forms/default.aspx" rel="tag"&gt;Forms&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/449.aspx" width="1" height="1" /&gt;</description><dc:creator>Sabrina C.</dc:creator></item><item><title>Vacanze</title><link>http://community.dotnetwork.it/mario.deghetto/archive/2010/06/30/vacanze.aspx</link><pubDate>Wed, 30 Jun 2010 02:22:08 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto/archive/2010/06/30/vacanze.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto/comments/448.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto/comments/commentRss/448.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto/archive/2010/06/30/vacanze.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto/services/trackbacks/448.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto/rss.aspx">Vacanze</source><description>&lt;p&gt;Anche per me sta arrivando il momento di andare in vacanza: partirò sabato con la famiglia in direzione di Rimini.&lt;/p&gt;  &lt;p&gt;Probabilmente non pubblicherò più nulla fino al mio rientro che avverrà il 18 di Luglio e quindi saluto tutti quelli che seguono i miei blog e auguro BUONE VACANZE A TUTTI!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/mario.deghetto/WindowsLiveWriter/Vacanze_5974/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="http://community.dotnetwork.it/images/community_dotnetwork_it/mario.deghetto/WindowsLiveWriter/Vacanze_5974/image_thumb.png" width="366" height="482" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto/aggbug/448.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto</dc:creator></item><item><title>Conversione di un numero in colonna Excel</title><link>http://community.dotnetwork.it/rudy/archive/2010/06/29/conversione-di-un-numero-in-colonna-excel.aspx</link><pubDate>Tue, 29 Jun 2010 07:09:57 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/rudy/archive/2010/06/29/conversione-di-un-numero-in-colonna-excel.aspx</guid><wfw:comment>http://community.dotnetwork.it/rudy/comments/447.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/rudy/comments/commentRss/447.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/rudy/archive/2010/06/29/conversione-di-un-numero-in-colonna-excel.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/rudy/services/trackbacks/447.aspx</trackback:ping><source url="http://community.dotnetwork.it/rudy/rss.aspx">Conversione di un numero in colonna Excel</source><description>&lt;p&gt;&lt;span class="prima"&gt;E&lt;/span&gt;cco il codice per convertire un numero nell'indice alfanumerico di una colonna Excel:&lt;/p&gt;  &lt;pre class="CSharpFormat"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ExcelFunc
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ConvertToLetter(&lt;span class="kwrd"&gt;int&lt;/span&gt; colIndex)
    {
        &lt;span class="kwrd"&gt;string&lt;/span&gt; ret = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
        var alpha = colIndex/27;
        var remainder = colIndex-(alpha*26);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (alpha &amp;gt; 0)
            ret = Char.ConvertFromUtf32(alpha+64);
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (remainder &amp;gt; 0)
                ret += Char.ConvertFromUtf32(remainder+64);
        &lt;span class="kwrd"&gt;return&lt;/span&gt; ret;
    }
}&lt;/pre&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6f88b199-8c3a-49e2-8b1c-058533f957d6" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://community.dotnetwork.it/rudy/Tags/tips/default.aspx" rel="tag"&gt;tips&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/rudy/aggbug/447.aspx" width="1" height="1" /&gt;</description><dc:creator>Rudy Azzan</dc:creator></item><item><title>[VS 2010] Crash durante il &amp;ldquo;copia/incolla&amp;rdquo;</title><link>http://community.dotnetwork.it/mario.deghetto/archive/2010/06/28/vs-2010-crash-durante-il-ldquocopiaincollardquo.aspx</link><pubDate>Mon, 28 Jun 2010 14:30:38 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto/archive/2010/06/28/vs-2010-crash-durante-il-ldquocopiaincollardquo.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto/comments/446.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto/comments/commentRss/446.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto/archive/2010/06/28/vs-2010-crash-durante-il-ldquocopiaincollardquo.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto/services/trackbacks/446.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto/rss.aspx">[VS 2010] Crash durante il &amp;ldquo;copia/incolla&amp;rdquo;</source><description>&lt;p&gt;&lt;font size="2"&gt;Sarà probabilmente capitato a qualcuno durante una intensa sessione di copia/incolla su Visual Studio 2010: un “bel” crash...&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Ora esiste una patch per risolvere questo problema: sul sito del Team di MSDN Italia, Pietro Brambati &lt;/font&gt;&lt;a href="http://blogs.msdn.com/b/italy/archive/2010/06/28/patch-per-visual-studio-2010.aspx" target="_blank"&gt;&lt;u&gt;&lt;font color="#0000ff" size="2"&gt;ha pubblicato il link per scaricare la patch&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto/aggbug/446.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto</dc:creator></item><item><title>VS 2010: Disponibile la prima FIX per un Bug </title><link>http://community.dotnetwork.it/alberto/archive/2010/06/28/vs-2010-disponibile-la-prima-fix-per-un-bug.aspx</link><pubDate>Mon, 28 Jun 2010 14:02:02 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/alberto/archive/2010/06/28/vs-2010-disponibile-la-prima-fix-per-un-bug.aspx</guid><wfw:comment>http://community.dotnetwork.it/alberto/comments/445.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/alberto/comments/commentRss/445.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/alberto/archive/2010/06/28/vs-2010-disponibile-la-prima-fix-per-un-bug.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/alberto/services/trackbacks/445.aspx</trackback:ping><source url="http://community.dotnetwork.it/alberto/rss.aspx">VS 2010: Disponibile la prima FIX per un Bug </source><description>&lt;p&gt;Può essere capitato che durante le operazioni di Taglia o Copia con VS 2010 abbiate ricevuto il messaggio seguente:&lt;/p&gt;
&lt;p&gt;"Insufficient available memory to meet the expected demands of an operation at this time, possibly due to virtual address space fragmentation. Please try again later."&lt;/p&gt;
&lt;p&gt;In questo caso il problema può essere legato ad un bug di VS 2010 che è stato corretto. La fix è disponibile su &lt;a href="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=29729"&gt;Connect&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;A presto,&lt;/p&gt;
&lt;p&gt;Alberto.&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/alberto/aggbug/445.aspx" width="1" height="1" /&gt;</description><dc:creator>Alberto De Luca</dc:creator></item><item><title>Annunciati i nuovi eventi di formazione su Visual Basic 2010</title><link>http://community.dotnetwork.it/alberto/archive/2010/06/28/annunciato-i-nuovi-eventi-di-formazione-su-visual-basic-2010.aspx</link><pubDate>Mon, 28 Jun 2010 10:18:44 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/alberto/archive/2010/06/28/annunciato-i-nuovi-eventi-di-formazione-su-visual-basic-2010.aspx</guid><wfw:comment>http://community.dotnetwork.it/alberto/comments/444.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/alberto/comments/commentRss/444.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/alberto/archive/2010/06/28/annunciato-i-nuovi-eventi-di-formazione-su-visual-basic-2010.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/alberto/services/trackbacks/444.aspx</trackback:ping><source url="http://community.dotnetwork.it/alberto/rss.aspx">Annunciati i nuovi eventi di formazione su Visual Basic 2010</source><description>&lt;p&gt;Ciao a tutti!&lt;/p&gt;
&lt;p&gt;Siamo riusciti a trovare la sede e a procedere con l'organizzazione degli eventi di formazione su Visual Basic 2010. Per info: &lt;font face=""&gt;&lt;a href="http://www.dotnetwork.it/Workshops/VisualBasic2010TrainingRallies/tabid/150/Default.aspx"&gt;http://www.dotnetwork.it/Workshops/VisualBasic2010TrainingRallies/tabid/150/Default.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://community.dotnetwork.it/alberto/aggbug/444.aspx" width="1" height="1" /&gt;</description><dc:creator>Alberto De Luca</dc:creator></item><item><title>[VB 2010 Express e VS 2010] Lingua italiana e lingua inglese contemporaneamente attive</title><link>http://community.dotnetwork.it/mario.deghetto/archive/2010/06/28/vb-2010-express-e-vs-2010-lingua-italiana-e-lingua.aspx</link><pubDate>Mon, 28 Jun 2010 01:54:57 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/mario.deghetto/archive/2010/06/28/vb-2010-express-e-vs-2010-lingua-italiana-e-lingua.aspx</guid><wfw:comment>http://community.dotnetwork.it/mario.deghetto/comments/443.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/mario.deghetto/comments/commentRss/443.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/mario.deghetto/archive/2010/06/28/vb-2010-express-e-vs-2010-lingua-italiana-e-lingua.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/mario.deghetto/services/trackbacks/443.aspx</trackback:ping><source url="http://community.dotnetwork.it/mario.deghetto/rss.aspx">[VB 2010 Express e VS 2010] Lingua italiana e lingua inglese contemporaneamente attive</source><description>&lt;p&gt;Un mese fa, circa, ho pubblicato &lt;a href="http://deghetto.wordpress.com/2010/05/23/vs-2010-versione-inglese-e-italiana-insieme/" target="_blank"&gt;&lt;u&gt;&lt;strong&gt;un post&lt;/strong&gt;&lt;/u&gt;&lt;/a&gt; sulla possibilità di installare sul proprio PC le versioni italiana e inglese di Visual Studio 2010, semplicemente installando la versione italiana sopra quella inglese e cambiando una delle opzioni del software.&lt;/p&gt;  &lt;p&gt;Non solo è possibile fare la stessa cosa anche con le versioni Express, ma è possibile avere in funzione contemporaneamente una istanza in versione inglese e una istanza in versione italiana, sia di Visual Studio 2010, sia di Visual Basic 2010 Express.&lt;/p&gt;  &lt;p&gt;Come? E’ semplice, se seguite queste istruzioni:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;aprite la prima istanza di Visual Basic 2010 Express o di Visual Studio 2010. Questa sarà in lingua inglese o in lingua italiana; &lt;/li&gt;    &lt;li&gt;aprite una seconda istanza dello stesso software. Ovviamente questa seconda istanza sarà nella stessa lingua della prima istanza; &lt;/li&gt;    &lt;li&gt;cambiate le impostazioni di lingua della seconda istanza come indicato nel post che ho richiamato all’inizio di questo post; &lt;/li&gt;    &lt;li&gt;riavviate la seconda istanza, come indicato dal messaggio che vi apparirà. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;A questo punto avrete in funzione un’istanza in lingua inglese e una in lingua italiana. Virtualmente potreste aprire anche altre istanze in lingue diverse: l’effettiva possibilità di aprire tante istanze dipende naturalmente da quanta RAM avete a disposizione sul PC.&lt;/p&gt;  &lt;p&gt;Attenzione che se chiudete la prima istanza, dovete ripetere l’operazione, tornando alla lingua precedente, perché all’apertura di Visual Basic 2010 Express o di Visual Studio 2010 è attiva solamente l’ultima lingua impostata.&lt;/p&gt;  &lt;p&gt;A cosa serve questa funzionalità? E’ il modo migliore per confrontare la versione inglese con quella italiana, specialmente per capire quali termini tecnici sono utilizzati nella versione inglese per poter effettuare delle ricerche efficaci nella documentazione MSDN o su Google. Un’altro ambito di utilizzo è per chi scrive articoli o libri: in questo modo è possibile vedere gli stessi elementi dell’interfaccia visuale in due lingue, per riportare entrambi nell’articolo o nel libro, senza dover utilizzare due PC o una virtual machine.&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/mario.deghetto/aggbug/443.aspx" width="1" height="1" /&gt;</description><dc:creator>Mario De Ghetto</dc:creator></item><item><title>TFS 2010: Come cancellare correttamente i Workspaces locali</title><link>http://community.dotnetwork.it/alberto/archive/2010/06/25/tfs-2010-come-cancellare-correttamente-i-workspaces-locali.aspx</link><pubDate>Fri, 25 Jun 2010 10:56:27 GMT</pubDate><guid isPermaLink="true">http://community.dotnetwork.it/alberto/archive/2010/06/25/tfs-2010-come-cancellare-correttamente-i-workspaces-locali.aspx</guid><wfw:comment>http://community.dotnetwork.it/alberto/comments/442.aspx</wfw:comment><wfw:commentRss>http://community.dotnetwork.it/alberto/comments/commentRss/442.aspx</wfw:commentRss><comments>http://community.dotnetwork.it/alberto/archive/2010/06/25/tfs-2010-come-cancellare-correttamente-i-workspaces-locali.aspx#comment</comments><slash:comments>0</slash:comments><trackback:ping>http://community.dotnetwork.it/alberto/services/trackbacks/442.aspx</trackback:ping><source url="http://community.dotnetwork.it/alberto/rss.aspx">TFS 2010: Come cancellare correttamente i Workspaces locali</source><description>&lt;p&gt;Premetto che sto utilizzando TFS più come Source Control che per altro e ultimamente mi è capitato di dover spostare tutti i miei progetti su un nuovo server di TFS. Non avendo grosse esigenze di "migrazione" ho semplicemente deassociato le applicazioni correnti cercando di ricrearle sul nuovo server. Effettuando questa operazione VS 2010 mi dice che, essendo mappata su un Workspace esistente, la mia soluzione non posso spostarla su un'altro server. Per evitare questo inconveniente è necessario cancellare la cache locale di TFS attraverso il comando "tf workspaces /remove". Si apre il prompt dei comandi (la directory di tf.exe è: &lt;font face=""&gt;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE) &lt;/font&gt;e si lancia il comando:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;tf workspaces /remove:* /server:http://&lt;em&gt;ipaddress:8080/tfs/Nome%20Collection&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;La cosa più difficoltosa è impostare correttamente il riferimento del server registrato nella cache locale (il file della cache locale è memorizzato su C:\Document And Settings..... che in Windows 7 non è raggiungibile), per ottenere l'esatta denominazione del Workspace da eliminare dalla cache locale si deve usare il comando:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;tf workspaces&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;che ci restituisce l'elenco dei workspaces registrati nella cache locale&lt;/p&gt;
&lt;p&gt;Saluti,&lt;/p&gt;
&lt;p&gt;Alberto.&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/alberto/aggbug/442.aspx" width="1" height="1" /&gt;</description><dc:creator>Alberto De Luca</dc:creator></item></channel></rss>