<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/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Gestione Dati</title>
        <link>http://community.dotnetwork.it/sabrina/category/5.aspx</link>
        <description>Elaborazione di dati, Uso di database, Query, ADO.Net</description>
        <language>it-IT</language>
        <copyright>Sabrina C.</copyright>
        <managingEditor>ziayeye@ziayeye.it</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <item>
            <title>Installare SQL Server 2008 Express Edition su Windows 2008 R2 64bit</title>
            <link>http://community.dotnetwork.it/sabrina/archive/2011/09/14/installare-sql-server-2008-express-edition-su-windows-2008-r2.aspx</link>
            <description>&lt;p&gt;Un Webcast di tipo Sistemistico per spiegare come installare SQL Server Express edition configurandolo in modo professionale, era dai tempi di MSDE che non replicavo questo tipo di post, pertanto ho ritenuto opportuno farlo, soprattutto perché mi sono trovata da un paio di clienti ove ho trovato la classica installazione Avanti –&amp;gt; Avanti –&amp;gt; Invio e quindi ho creduto opportuno dare modo anche a chi non è un sistemista esperto di sapere come e soprattutto perché fare determinate operazioni quando si installa SQL Server. Replicherò anche con una versione non express prossimamente, aggiungendo anche la parte di configurazione degli utenti di servizio.&lt;/p&gt;  &lt;p&gt;&lt;!-- copy and paste. Modify height and width if desired. --&gt;&lt;object id="scPlayer" width="800" height="450" type="application/x-shockwave-flash" data="http://content.screencast.com/users/Sabrina_C/folders/DNW_Sql/media/a57803df-20c1-4e9e-8d29-adeb970d7134/scplayer.swf"&gt;&lt;param name="movie" value="http://content.screencast.com/users/Sabrina_C/folders/DNW_Sql/media/a57803df-20c1-4e9e-8d29-adeb970d7134/scplayer.swf" /&gt;&lt;param name="quality" value="high" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/Sabrina_C/folders/DNW_Sql/media/a57803df-20c1-4e9e-8d29-adeb970d7134/FirstFrame.jpg&amp;amp;containerwidth=800&amp;amp;containerheight=450&amp;amp;autohide=true&amp;amp;autostart=false&amp;amp;loop=false&amp;amp;showendscreen=true&amp;amp;showsearch=true&amp;amp;showstartscreen=true&amp;amp;tocdoc=float&amp;amp;xmp=sc.xmp&amp;amp;content=http://content.screencast.com/users/Sabrina_C/folders/DNW_Sql/media/a57803df-20c1-4e9e-8d29-adeb970d7134/sqlexpress_install.mp4&amp;amp;blurover=false" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="scale" value="showall" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="base" value="http://content.screencast.com/users/Sabrina_C/folders/DNW_Sql/media/a57803df-20c1-4e9e-8d29-adeb970d7134/" /&gt;&lt;iframe type="text/html" frameborder="0" scrolling="no" style="overflow:hidden;" src="http://www.screencast.com/users/Sabrina_C/folders/DNW_Sql/media/a57803df-20c1-4e9e-8d29-adeb970d7134/embed" height="450" width="800"&gt;&lt;/iframe&gt;&lt;/object&gt;&lt;/p&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:0fcf41dc-2849-4416-a949-1870746a2ac4" class="wlWriterEditableSmartContent"&gt;Tag di Technorati: &lt;a href="http://technorati.com/tags/SQL" rel="tag"&gt;SQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Install" rel="tag"&gt;Install&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SqlExpress" rel="tag"&gt;SqlExpress&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&lt;a href="http://www.screencast.com/t/w2kb8J8hTwZ" target="_blank"&gt;A questo indirizzo potete scaricare il webcast.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/877.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sabrina C.</dc:creator>
            <guid>http://community.dotnetwork.it/sabrina/archive/2011/09/14/installare-sql-server-2008-express-edition-su-windows-2008-r2.aspx</guid>
            <pubDate>Wed, 14 Sep 2011 17:21:40 GMT</pubDate>
            <wfw:comment>http://community.dotnetwork.it/sabrina/comments/877.aspx</wfw:comment>
            <comments>http://community.dotnetwork.it/sabrina/archive/2011/09/14/installare-sql-server-2008-express-edition-su-windows-2008-r2.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/877.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Lavorare con dati di grandi dimensioni in SQL Server</title>
            <link>http://community.dotnetwork.it/sabrina/archive/2011/05/02/lavorare-con-dati-di-grandi-dimensioni-in-sql-server.aspx</link>
            <description>&lt;p&gt;Come promesso al workshop di Pordenone dello scorso 28 Aprile 2011, ho preparato il webcast del primo dei miei due interventi, quello relativo alla manipolazione di dati binari di grandi dimensioni su database SQL Server usando la scrittura e la lettura per Segmenti (Chunks).&lt;/p&gt;
&lt;p&gt;In questo webcast composto da una parte spiegata su powerpoint e una seconda parte che mostra i punti principali del progetto demo a corredo, spieghiamo come fare a Scrivere su campi di tipo Image o di tipo VarBinary(max) suddividendo i dati binari in segmenti per poter gestire la memorizzazione di files di grandi dimensioni in un database. &lt;/p&gt;
&lt;object height="516" width="750" id="scPlayer" type="application/x-shockwave-flash" data="http://content.screencast.com/users/Sabrina_C/folders/DotNetWork/media/228a528d-0480-468d-9235-586db873b668/scplayer.swf"&gt;
&lt;param name="movie" value="http://content.screencast.com/users/Sabrina_C/folders/DotNetWork/media/228a528d-0480-468d-9235-586db873b668/scplayer.swf" /&gt;
&lt;param name="quality" value="high" /&gt;
&lt;param name="bgcolor" value="#FFFFFF" /&gt;
&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/Sabrina_C/folders/DotNetWork/media/228a528d-0480-468d-9235-586db873b668/FirstFrame.jpg&amp;amp;containerwidth=750&amp;amp;containerheight=516&amp;amp;autohide=true&amp;amp;autostart=false&amp;amp;loop=false&amp;amp;showendscreen=true&amp;amp;showsearch=true&amp;amp;showstartscreen=true&amp;amp;tocdoc=float&amp;amp;xmp=sc.xmp&amp;amp;content=http://content.screencast.com/users/Sabrina_C/folders/DotNetWork/media/228a528d-0480-468d-9235-586db873b668/workshop.mp4&amp;amp;blurover=false" /&gt;
&lt;param name="allowFullScreen" value="true" /&gt;
&lt;param name="scale" value="showall" /&gt;
&lt;param name="allowScriptAccess" value="always" /&gt;
&lt;param name="base" value="http://content.screencast.com/users/Sabrina_C/folders/DotNetWork/media/228a528d-0480-468d-9235-586db873b668/" /&gt; &lt;iframe scrolling="no" height="516" frameborder="0" width="750" type="text/html" style="overflow: hidden;" src="http://www.screencast.com/users/Sabrina_C/folders/DotNetWork/media/228a528d-0480-468d-9235-586db873b668/embed"&gt;&lt;/iframe&gt; &lt;/object&gt;
&lt;p&gt;Codice a corredo: &lt;a href="http://www.dotnetwork.it/LinkClick.aspx?fileticket=dz4k-xNs5Qk%3d&amp;amp;tabid=191&amp;amp;mid=727"&gt;sqlchunks.zip&lt;/a&gt;   &lt;/p&gt;
&lt;div style="padding: 0px; margin: 0px; display: inline; float: none;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:93b07562-fd6f-46cb-b112-e295ba95f007" class="wlWriterEditableSmartContent"&gt;&lt;br /&gt;
Tag di Technorati: &lt;a href="http://technorati.com/tags/c%23" rel="tag"&gt;c#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/sql" rel="tag"&gt;sql&lt;/a&gt;,&lt;a href="http://technorati.com/tags/tsql" rel="tag"&gt;tsql&lt;/a&gt;,&lt;a href="http://technorati.com/tags/sqlserver" rel="tag"&gt;sqlserver&lt;/a&gt;,&lt;a href="http://technorati.com/tags/image" rel="tag"&gt;image&lt;/a&gt;,&lt;a href="http://technorati.com/tags/varbinary" rel="tag"&gt;varbinary&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/799.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sabrina C.</dc:creator>
            <guid>http://community.dotnetwork.it/sabrina/archive/2011/05/02/lavorare-con-dati-di-grandi-dimensioni-in-sql-server.aspx</guid>
            <pubDate>Mon, 02 May 2011 19:48:10 GMT</pubDate>
            <wfw:comment>http://community.dotnetwork.it/sabrina/comments/799.aspx</wfw:comment>
            <comments>http://community.dotnetwork.it/sabrina/archive/2011/05/02/lavorare-con-dati-di-grandi-dimensioni-in-sql-server.aspx#feedback</comments>
            <wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/799.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Lezioni di &amp;quot;pesca&amp;quot; .Net in C# parte 3</title>
            <link>http://community.dotnetwork.it/sabrina/archive/2011/04/30/lezioni-di-quotpescaquot-.net-in-c-parte-3.aspx</link>
            <description>&lt;p&gt;Nel terzo webcast della serie che ho chiamato “Non Solo Hello World”, proseguiamo lo sviluppo della nostra applicazione di test iniziando a vedere qualcosa di più sofisticato nella nostra classe dati di base e qualcosa di più sofisticato a livello di interfaccia.&lt;/p&gt;
&lt;p&gt;Risponderemo con una prima versione alla domanda: “Ma come posso salvare dei dati digitati su schermo e persisterli su disco.”&lt;/p&gt;
&lt;p&gt;E vedremo come realizzare una Form che inizi a fornirci i servizi di base per gestire una lista di oggetti su cui compiere le azioni classiche di Nuovo, Modifica, Visualizza.&lt;/p&gt;
&lt;p&gt;Approfitto di questo post per ringraziare le oltre ottanta persone che hanno visualizzato i due webcast già pubblicati, consumando la pur generosa banda offerta dall’account gratuito di Screencast.com in pochissimo tempo. Ho già provveduto ad estendere l’account ad una versione Pro, per darvi modo di vedere i webcast senza limitazioni.&lt;/p&gt;
&lt;p&gt;Grazie ancora e “Buona Pesca”.&lt;/p&gt;
&lt;object height="562" width="750" id="scPlayer" type="application/x-shockwave-flash" data="http://content.screencast.com/users/Sabrina_C/folders/DotNetWork/media/ecc126a8-d27d-4b98-b0f5-c7e4eb71c1d6/scplayer.swf"&gt;
&lt;param name="movie" value="http://content.screencast.com/users/Sabrina_C/folders/DotNetWork/media/ecc126a8-d27d-4b98-b0f5-c7e4eb71c1d6/scplayer.swf" /&gt;
&lt;param name="quality" value="high" /&gt;
&lt;param name="bgcolor" value="#FFFFFF" /&gt;
&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/Sabrina_C/folders/DotNetWork/media/ecc126a8-d27d-4b98-b0f5-c7e4eb71c1d6/FirstFrame.jpg&amp;amp;containerwidth=750&amp;amp;containerheight=562&amp;amp;autohide=true&amp;amp;autostart=false&amp;amp;loop=false&amp;amp;showendscreen=true&amp;amp;showsearch=false&amp;amp;showstartscreen=true&amp;amp;tocdoc=float&amp;amp;xmp=sc.xmp&amp;amp;content=http://content.screencast.com/users/Sabrina_C/folders/DotNetWork/media/ecc126a8-d27d-4b98-b0f5-c7e4eb71c1d6/unpopiudihello03.mp4&amp;amp;blurover=false" /&gt;
&lt;param name="allowFullScreen" value="true" /&gt;
&lt;param name="scale" value="showall" /&gt;
&lt;param name="allowScriptAccess" value="always" /&gt;
&lt;param name="base" value="http://content.screencast.com/users/Sabrina_C/folders/DotNetWork/media/ecc126a8-d27d-4b98-b0f5-c7e4eb71c1d6/" /&gt; &lt;iframe scrolling="no" height="562" frameborder="0" width="750" type="text/html" style="overflow: hidden;" src="http://www.screencast.com/users/Sabrina_C/folders/DotNetWork/media/ecc126a8-d27d-4b98-b0f5-c7e4eb71c1d6/embed"&gt; &lt;/iframe&gt;&lt;/object&gt;
&lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:09ccba0a-5f90-4cab-921a-2aba8c9dd5b5" style="padding: 0px; margin: 0px; display: inline; float: none;"&gt;Tag di Technorati: &lt;a rel="tag" href="http://technorati.com/tags/C%23"&gt;C#&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/classi"&gt;classi&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/I%2fO"&gt;I/O&lt;/a&gt;,&lt;a rel="tag" href="http://technorati.com/tags/ListView"&gt;ListView&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href="http://www.dotnetwork.it/LinkClick.aspx?fileticket=NJW8iBRCajM%3d&amp;amp;tabid=191&amp;amp;mid=727"&gt;Il codice a corredo della terza lezione &lt;/a&gt;
&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/795.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sabrina C.</dc:creator>
            <guid>http://community.dotnetwork.it/sabrina/archive/2011/04/30/lezioni-di-quotpescaquot-.net-in-c-parte-3.aspx</guid>
            <pubDate>Sat, 30 Apr 2011 10:22:43 GMT</pubDate>
            <wfw:comment>http://community.dotnetwork.it/sabrina/comments/795.aspx</wfw:comment>
            <comments>http://community.dotnetwork.it/sabrina/archive/2011/04/30/lezioni-di-quotpescaquot-.net-in-c-parte-3.aspx#feedback</comments>
            <wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/795.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Lavorare con XML parte 2</title>
            <link>http://community.dotnetwork.it/sabrina/archive/2010/11/01/lavorare-con-xml-parte-2.aspx</link>
            <description>&lt;h3&gt;Che cosa ci viene offerto gratuitamente dal sistema&lt;/h3&gt;
&lt;p&gt;Come ho già spiegato nel precedente post, .NET è molto XML friendly, pertanto ci offre una serie di funzionalità di base al riguardo senza che dobbiamo divertirci a fare le cose a manina. Pertanto ho costruito una classe fondamentalmente inutile che però ci dimostra come tutti i tipi di dati di base di .NET sono serializzabili.&lt;/p&gt;
&lt;pre class="CSharpFormat"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="CSharpFormat"&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; DnwEnitities.Entities
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Serializzabile
    {

        &lt;span class="kwrd"&gt;public&lt;/span&gt; Serializzabile()
        {
            TheChar = &lt;span class="str"&gt;'A'&lt;/span&gt;;
            TheByte = 10;
            TheBool = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            TheShort = 100;
            TheInt = 1000;
            TheLong = 1000000;
            TheFloat = 1234.7899f;
            TheDouble = 9800000.89600;
            TheDecimal = 766000000.654390001m;
            TheString = &lt;span class="str"&gt;"The string is very nice and useful."&lt;/span&gt;;
            TheDate = DateTime.Now;
            TheGuid = Guid.NewGuid();
            TheEnum = SerializableEnum.ALot;
        }
    
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;char&lt;/span&gt; TheChar
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt; TheByte
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; TheBool
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;short&lt;/span&gt; TheShort
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; TheInt
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; TheLong
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;float&lt;/span&gt; TheFloat
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;double&lt;/span&gt; TheDouble
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; TheDecimal
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; TheString
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; DateTime TheDate
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; Guid TheGuid
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; SerializableEnum TheEnum
        {
            get;
            set;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Serializzabile ReadXml(&lt;span class="kwrd"&gt;string&lt;/span&gt; pSerializedData, &lt;span class="kwrd"&gt;bool&lt;/span&gt; pIsXmlData)
        {
            Serializzabile retP = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!pIsXmlData)
            {
                retP = (Serializzabile)SerializeHelper.DeserializeFromFile(&lt;br /&gt;                   &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Serializzabile), pSerializedData);
            }
            &lt;span class="kwrd"&gt;else&lt;/span&gt;
            {
                retP = (Serializzabile)SerializeHelper.DeserializeFromString(&lt;br /&gt;                   &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Serializzabile), pSerializedData);
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (retP);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; WriteXml(&lt;span class="kwrd"&gt;string&lt;/span&gt; pFileName)
        {
            SerializeHelper.SerializeToFile(pFileName, &lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Serializzabile), &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; WriteXml()
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (SerializeHelper.SerializeToString(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty));
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ToString()
        {
            StringBuilder sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();
            sb.AppendFormat(&lt;span class="str"&gt;"Char: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheChar);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Byte: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheByte);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Bool: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheBool);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Short: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheShort);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Int: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheInt);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Long: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheLong);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Float: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheFloat);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Double: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheDouble);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Decimal: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheDecimal);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"String: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheString);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Date: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheDate);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Guid: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheGuid);
            sb.AppendLine();
            sb.AppendFormat(&lt;span class="str"&gt;"Enum: {0}"&lt;/span&gt;, &lt;span class="kwrd"&gt;this&lt;/span&gt;.TheEnum);
            sb.AppendLine();
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (sb.ToString());
        }

    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; SerializableEnum : &lt;span class="kwrd"&gt;int&lt;/span&gt;
    {
        None = 0,
        All,
        Some,
        ALot
    }
    
}&lt;/pre&gt;
&lt;p&gt;Questa classe, rappresenta l’entity più grezza e semplice, contiene una serie di property pubbliche, una per ogni tipo di dato base usato in .NET, contiene i Metodi  WriteXml e ReadXml, un override del metodo ToString per permetterci di visualizzarne il contenuto ed infine una enumerazione che ci permette di mostrare che anche i dati enumerati, sono serializzati automaticamente.&lt;/p&gt;
&lt;p&gt;Instanziando la classe e lanciando WriteXml su un file, otterremo il seguente risultato:&lt;/p&gt;
&lt;pre class="HtmlFormat"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Serializzabile&lt;/span&gt; &lt;span class="attr"&gt;xmlns:xsi&lt;/span&gt;&lt;span class="kwrd"&gt;=&lt;a href="http://www.w3.org/2001/XMLSchema-instance"&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/a&gt;&lt;/span&gt; &lt;br /&gt;&lt;span class="attr"&gt;     xmlns:xsd&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheChar&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;65&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheChar&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheByte&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;10&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheByte&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheBool&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;true&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheBool&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheShort&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;100&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheShort&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheInt&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1000&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheInt&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheLong&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1000000&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheLong&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheFloat&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1234.78992&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheFloat&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheDouble&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;9800000.896&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheDouble&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheDecimal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;766000000.654390001&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheDecimal&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheString&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;The string is very nice and useful.&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheString&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheDate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;2010-11-01T09:26:13.331+01:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheDate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheGuid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;3da90b04-ec02-4308-a177-fc6723ab8aa9&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheGuid&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TheEnum&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ALot&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TheEnum&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Serializzabile&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Usando la ReadXml per rileggere il file, otterremo una classe equivalente a quella da noi salvata.&lt;/p&gt;
&lt;p&gt;Se non abbiamo particolari esigenze, questo è il metodo più semplice di ottenere un entità serializzabile.&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:f9cef952-a247-40e7-af19-b96c7a17cc4a" class="wlWriterEditableSmartContent"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/entities" rel="tag"&gt;entities&lt;/a&gt;,&lt;a href="http://technorati.com/tags/serialization" rel="tag"&gt;serialization&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/544.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sabrina C.</dc:creator>
            <guid>http://community.dotnetwork.it/sabrina/archive/2010/11/01/lavorare-con-xml-parte-2.aspx</guid>
            <pubDate>Mon, 01 Nov 2010 08:28:58 GMT</pubDate>
            <wfw:comment>http://community.dotnetwork.it/sabrina/comments/544.aspx</wfw:comment>
            <comments>http://community.dotnetwork.it/sabrina/archive/2010/11/01/lavorare-con-xml-parte-2.aspx#feedback</comments>
            <wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/544.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Lavorare con XML parte 1</title>
            <link>http://community.dotnetwork.it/sabrina/archive/2010/10/31/lavorare-con-xml-parte-1.aspx</link>
            <description>&lt;p&gt;Dopo un mese dall’evento di Pordenone, riesco finalmente ad avere il tempo di iniziare una breve serie di post dedicati alla serializzazione delle entity. Inizierò con l’helper di serializzazione già discusso in passato, ma ora riveduto e corretto usando il framework 4.0.&lt;/p&gt;
&lt;p&gt;Per persistere su disco una classe C# (oVB) bisogna che questa classe sia creata con alcuni, semplici accorgimenti che la rendano Serializzabile. Serializzazione è una parola che è iniziata ad arrivare ai miei orecchi attorno al 2003, alle prime conferenze su .NET, è una parola derivata dall’inglese Serialization, non esiste sul Devoto Oli, il suo significato è persistere lo stato di un oggetto che si trova nella memoria di un programma in esecuzione in modo tale da poter rigenerare l’oggetto nello stesso stato rileggendo le informazioni salvate su un disco (o altro analogo supporto di memoria di massa.)&lt;/p&gt;
&lt;p&gt;Le classi Entity, sono delle classi che non hanno nulla di particolare se non il fatto che rappresentano dei dati strutturati, pertanto vengono considerate tali tutte le classi che compongono ad esempio un modello dati, semplice, usato con LinqToSql oppure con EntityFramework, pertanto sono quelle che con maggiore probabilità hanno la necessità di essere serializzate.&lt;/p&gt;
&lt;p&gt;In .NET, è possibile serializzare dati in 2 modalità, la serializzazione binaria e la serializzazione XML. Tutti i tipi di dati base di .NET sono serializzabili, pertanto, qualsiasi classe che contiene solo dati di questo tipo è serializzabile in modo diretto, senza particolari modifiche se non che è indispensabile che la classe implementi un costruttore senza parametri.&lt;/p&gt;
&lt;p&gt;Che cosa viene serializzato automaticamente da .NET di un oggetto? Tutte le property Pubbliche, perché le sole property pubbliche? perché si assume che le variabili private possano essere rigenerate senza necessità di essere serializzate. Ma è ovviamente possibile effettuare un Override della serializzazione automatica e serializzare ciò che si vuole e come si vuole. &lt;/p&gt;
&lt;p&gt;In questa serie di articoli esamineremo solo la serializzazione standard e tutto quello che si può pilotare in essa utilizzando poche semplici funzionalità a nostra disposizione. &lt;/p&gt;
&lt;h3&gt;La classe SerializeHelper&lt;/h3&gt;
&lt;p&gt;Questa classe fornisce tutti i servizi di serializzazione sia per oggetti semplici che per oggetti compositi (collezioni od oggetti contenenti tipi di dati non semplici). Utilizza  le classi del namespace System.Xml e System.Xml.Serialization. Vediamone quindi i vari metodi:&lt;/p&gt;
&lt;h4&gt; &lt;/h4&gt;
&lt;h4&gt; &lt;/h4&gt;
&lt;h4&gt;BuildReader&lt;/h4&gt;
&lt;pre class="CSharpFormat"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; XmlTextReader BuildReader(&lt;span class="kwrd"&gt;string&lt;/span&gt; pXmlString)
        {
            NameTable nt = &lt;span class="kwrd"&gt;new&lt;/span&gt; NameTable();
            XmlNamespaceManager nsmgr = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlNamespaceManager(nt);
            nsmgr.AddNamespace(&lt;span class="str"&gt;"bk"&lt;/span&gt;, &lt;span class="str"&gt;"urn:sample"&lt;/span&gt;);

            XmlParserContext context = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlParserContext(&lt;span class="kwrd"&gt;null&lt;/span&gt;, nsmgr, &lt;span class="kwrd"&gt;null&lt;/span&gt;, XmlSpace.None);

            &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(pXmlString, XmlNodeType.Element, context));
        }&lt;/pre&gt;
&lt;p&gt;Questo primo metodo, come dice il suo nome, crea un &lt;strong&gt;XmlTextReader&lt;/strong&gt;, che con il corrispondente &lt;strong&gt;XmlTextWriter&lt;/strong&gt; sono gli stream di base per la lettura e scrittura di dati XML. Il metodo qui scritto, è stato disegnato per permetterci di trasformare una stringa (ad esempio un campo di un database) in uno stream Xml. Si occupa di generare un contesto “fittizio” per così dire, per poter creare l’XmlTextReader in grado di fornire i dati Xml anche se l’input è una semplice stringa, non uno stream dati vero e proprio.&lt;/p&gt;
&lt;h4&gt;DeserializeFromString&lt;/h4&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;object&lt;/span&gt; DeserializeFromString(Type pTypeToDeserialize, &lt;span class="kwrd"&gt;string&lt;/span&gt; pXmlString)
        {
            &lt;span class="kwrd"&gt;object&lt;/span&gt; ret = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            &lt;span class="kwrd"&gt;using&lt;/span&gt; (XmlReader xr = BuildReader(pXmlString))
            {
                XmlSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializer(pTypeToDeserialize);
                ret = serializer.Deserialize(xr);
                xr.Close();
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (ret);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; DeserializeFromString(Type pTypeToDeserialize, &lt;br /&gt;               Type[] pExtraTypes, &lt;span class="kwrd"&gt;string&lt;/span&gt; pXmlString)
        {
            &lt;span class="kwrd"&gt;object&lt;/span&gt; ret = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            &lt;span class="kwrd"&gt;using&lt;/span&gt; (XmlReader xr = BuildReader(pXmlString))
            {
                XmlSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializer(pTypeToDeserialize, pExtraTypes);
                ret = serializer.Deserialize(xr);
                xr.Close();
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (ret);
        }&lt;/pre&gt;
&lt;p&gt;Questi due metodi, costruiti l’uno per una classe contenente solo dati semplici, l’altro per una classe contenente tipi di dati complessi, utilizzano il metodo precedente per creare uno stream dati che poi viene passato alla classe XmlSerializer e permette di ottenere l’oggetto originalmente serializzato.&lt;/p&gt;
&lt;h4&gt;DeserializeFromFile&lt;/h4&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;object&lt;/span&gt; DeserializeFromFile(Type pTypeToDeserialize, &lt;span class="kwrd"&gt;string&lt;/span&gt; pPath)
        {
            &lt;span class="kwrd"&gt;object&lt;/span&gt; ret = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            &lt;span class="kwrd"&gt;using&lt;/span&gt; (XmlTextReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(pPath))
            {
                &lt;span class="rem"&gt;// Occorre un'istanza della classe XmlSerializer&lt;/span&gt;
                XmlSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializer(pTypeToDeserialize);
                &lt;span class="rem"&gt;// e questo é tutto ciò che serve per leggere i dati dal formato XML&lt;/span&gt;
                ret = serializer.Deserialize(reader);
                reader.Close();
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (ret);
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; DeserializeFromFile(Type pTypeToDeserialize, &lt;br /&gt;            Type[] pExtraTypes, &lt;span class="kwrd"&gt;string&lt;/span&gt; pPath)
        {
            &lt;span class="kwrd"&gt;object&lt;/span&gt; ret = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            &lt;span class="kwrd"&gt;using&lt;/span&gt; (XmlTextReader reader = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextReader(pPath))
            {
                &lt;span class="rem"&gt;// Occorre un'istanza della classe XmlSerializer&lt;/span&gt;
                XmlSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializer(pTypeToDeserialize, pExtraTypes);
                &lt;span class="rem"&gt;// e questo é tutto ciò che serve per leggere i dati dal formato XML&lt;/span&gt;
                ret = serializer.Deserialize(reader);
                reader.Close();
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (ret);
        }&lt;/pre&gt;
&lt;p&gt;La deserializzazione da file è più semplice in quanto l’XmlTextreader può essere direttamente istanziato a partire dal nome di un file. I due overload di questo metodo permettono di specificare al deserializzatore quali sono le classi coinvolte, nel caso di oggetti non semplici. Vedremo il loro uso quando deserializzeremo le collection, ma allo stesso modo sono utili per la deserializzazione di oggetti complessi, che formano modelli con relazioni.&lt;/p&gt;
&lt;h4&gt;SerializeToFile&lt;/h4&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;void&lt;/span&gt; SerializeToFile(&lt;span class="kwrd"&gt;string&lt;/span&gt; pPath, &lt;span class="kwrd"&gt;object&lt;/span&gt; pObjToSerialize, &lt;br /&gt;          Type pTypeToSerialize, &lt;span class="kwrd"&gt;bool&lt;/span&gt; pNoNamespaces, &lt;span class="kwrd"&gt;string&lt;/span&gt; pPrefix)
        {
            FileInfo fInfo = &lt;span class="kwrd"&gt;new&lt;/span&gt; FileInfo(pPath);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!Directory.Exists(fInfo.DirectoryName))
            {
                Directory.CreateDirectory(fInfo.DirectoryName);
            }            
            &lt;span class="kwrd"&gt;using&lt;/span&gt;(XmlTextWriter writer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextWriter(pPath, Encoding.UTF8))
            {
                &lt;span class="rem"&gt;// write a readable file&lt;/span&gt;
                writer.Formatting = Formatting.Indented;
                writer.Indentation = 4;

                &lt;span class="rem"&gt;// Occorre un'istanza della classe XmlSerializer&lt;/span&gt;
                XmlSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializer(pTypeToSerialize);
                XmlSerializerNamespaces ns = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializerNamespaces();
                &lt;span class="kwrd"&gt;string&lt;/span&gt; prefix = pPrefix != &lt;span class="kwrd"&gt;null&lt;/span&gt; ? pPrefix : &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (pNoNamespaces)
                {
                    ns.Add(prefix, TXT_Namespace);
                }
                &lt;span class="rem"&gt;// e questo é tutto ciò che serve per persistere i dati&lt;/span&gt;
                serializer.Serialize(writer, pObjToSerialize, ns);
                writer.Close();
            }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SerializeToFile(&lt;span class="kwrd"&gt;string&lt;/span&gt; pPath, &lt;span class="kwrd"&gt;object&lt;/span&gt; pObjToSerialize, 
            Type pTypeToSerialize, Type[] pExtraTypes, &lt;span class="kwrd"&gt;bool&lt;/span&gt; pNoNamespaces, &lt;span class="kwrd"&gt;string&lt;/span&gt; pPrefix)
        {
            FileInfo fInfo = &lt;span class="kwrd"&gt;new&lt;/span&gt; FileInfo(pPath);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!Directory.Exists(fInfo.DirectoryName))
            {
                Directory.CreateDirectory(fInfo.DirectoryName);
            }            
            &lt;span class="kwrd"&gt;using&lt;/span&gt;(XmlTextWriter writer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlTextWriter(pPath, Encoding.UTF8))
            {
                &lt;span class="rem"&gt;// write a readable file&lt;/span&gt;
                writer.Formatting = Formatting.Indented;
                writer.Indentation = 4;
                &lt;span class="rem"&gt;//writer.Settings.OutputMethod = XmlOutputMethod.&lt;/span&gt;
                &lt;span class="rem"&gt;// Occorre un'istanza della classe XmlSerializer&lt;/span&gt;
                XmlSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializer(pTypeToSerialize, pExtraTypes);
                XmlSerializerNamespaces ns = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializerNamespaces();
                &lt;span class="kwrd"&gt;string&lt;/span&gt; prefix = pPrefix != &lt;span class="kwrd"&gt;null&lt;/span&gt; ? pPrefix : &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (pNoNamespaces)
                {
                    ns.Add(prefix, TXT_Namespace);
                }
                &lt;span class="rem"&gt;// e questo é tutto ciò che serve per persistere i dati&lt;/span&gt;
                serializer.Serialize(writer, pObjToSerialize, ns);
                writer.Close();
            }
        }&lt;/pre&gt;
&lt;p&gt;Per la serializzazione, oltre ai due overload che ci danno modo di dare informazioni al serializzatore sulle classi coinvolte, abbiamo aggiunto alcuni parametri che servono per la formattazione: pNoNamespaces e pPrefix. &lt;br /&gt;
Innanzi tutto possiamo notare come Creando l’XmlTextWriter, la classe che effettua la serializzazione, possiamo decidere l’encoding della stringa, pertanto, in base alle nostre esigenze possiamo cambiare l’encoding del file generato. Possiamo inoltre controllare la formattazione del file Xml generato usando l’opzione Formatting che ci da modo di indicare come deve essere formattato il testo, alcune altre property permettono di decidere l’ampiezza dell’indentazione e il carattere da utilizzare.&lt;/p&gt;
&lt;p&gt;l’uso di XmlSerializerNamespaces ci permette di evitare la verbosa serie dei namespaces inseriti all’apertura della serializzazione della classe:&lt;/p&gt;
&lt;p&gt;&amp;lt;Serializzabile xmlns:xsi="&lt;a href="http://www.w3.org/2001/XMLSchema-instance&amp;quot;"&gt;http://www.w3.org/2001/XMLSchema-instance"&lt;/a&gt; xmlns:xsd="&lt;a href="http://www.w3.org/2001/XMLSchema&amp;quot;"&gt;http://www.w3.org/2001/XMLSchema"&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;Sostituendola con:&lt;/p&gt;
&lt;p&gt;&amp;lt;Competences xmlns="&lt;a href="http://www.dotnetwork.it&amp;quot;"&gt;http://www.dotnetwork.it"&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;Oppure, usando il flag pNoNamespaces in:&lt;/p&gt;
&lt;p&gt;&amp;lt;Competences&amp;gt;&lt;/p&gt;
&lt;p&gt;Questo flag è opportuno utilizzarlo per creare classi neutre da utilizzare per lo scambio dati fra applicazioni di aziende diverse, mentre se vogliamo fare in modo che le nostre classi siano  marcate in modo specifico, lasciamo invece il namespace che abbiamo scelto per la nostra azienda, in modo tale che sia necessario specificamente implementarlo nelle classi da noi prodotte in modo tale da renderle univoche rispetto a quelle prodotte da altri.&lt;/p&gt;
&lt;p&gt;Il parametro pPrefix ha invece lo scopo di assegnare un prefisso agli elementi delle nostre classi.&lt;/p&gt;
&lt;p&gt;&amp;lt;dnw:Programmer xmlns:dnw="&lt;a href="http://www.dotnetwork.it"&gt;http://www.dotnetwork.it"&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;dnw:Skills&amp;gt;&lt;/p&gt;
&lt;p&gt;In questo modo possiamo specificare esattamente l’uso dei nostri oggetti senza dover reinserire il namespace completo.&lt;/p&gt;
&lt;h4&gt;SerializeToString&lt;/h4&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;string&lt;/span&gt; SerializeToString(&lt;span class="kwrd"&gt;object&lt;/span&gt; pObjToSerialize, &lt;br /&gt;            Type[] pExtraTypes, &lt;span class="kwrd"&gt;bool&lt;/span&gt; pNoNamespaces, &lt;span class="kwrd"&gt;string&lt;/span&gt; pPrefix)
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; ret = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
            &lt;span class="kwrd"&gt;using&lt;/span&gt; (MemoryStream stream = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream())
            {
                XmlSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializer(pObjToSerialize.GetType(), pExtraTypes);
                XmlSerializerNamespaces ns = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializerNamespaces();
                &lt;span class="kwrd"&gt;string&lt;/span&gt; prefix = pPrefix != &lt;span class="kwrd"&gt;null&lt;/span&gt; ? pPrefix : &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (pNoNamespaces)
                {
                    ns.Add(prefix, TXT_Namespace);
                }
                serializer.Serialize(stream, pObjToSerialize, ns);
                ret = Encoding.UTF8.GetString(stream.ToArray());
                stream.Close();
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (ret);
        }

        &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; SerializeToString(&lt;span class="kwrd"&gt;object&lt;/span&gt; pObjToSerialize, &lt;span class="kwrd"&gt;bool&lt;/span&gt; pNoNamespaces, &lt;span class="kwrd"&gt;string&lt;/span&gt; pPrefix)
        {
            &lt;span class="kwrd"&gt;string&lt;/span&gt; ret = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
            &lt;span class="kwrd"&gt;using&lt;/span&gt; (MemoryStream stream = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream())
            {
                XmlSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializer(pObjToSerialize.GetType());
                XmlSerializerNamespaces ns = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSerializerNamespaces();
                &lt;span class="kwrd"&gt;string&lt;/span&gt; prefix = pPrefix != &lt;span class="kwrd"&gt;null&lt;/span&gt; ? pPrefix : &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (pNoNamespaces)
                {
                    ns.Add(prefix, TXT_Namespace);
                }
                serializer.Serialize(stream, pObjToSerialize, ns);
                ret = Encoding.UTF8.GetString(stream.ToArray());
                stream.Close();
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; (ret);
        }&lt;/pre&gt;
&lt;p&gt;L’ultimo metodo, sempre con due overload, permette la serializzazione di un oggetto in Xml su una stringa, per poterlo fare dobbiamo utilizzare uno Stream, visto che dobbiamo poi trasformarlo in una stringa, utilizziamo un Memory Stream, per non dover generare un file. La procedura per la generazione dell’Xml, è identica a quella per i files.&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:34aabb1a-0e90-48b7-8fd8-a98914f96dc4" 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/Xml" rel="tag"&gt;Xml&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Serializzazione" rel="tag"&gt;Serializzazione&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Helper" rel="tag"&gt;Helper&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/539.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sabrina C.</dc:creator>
            <guid>http://community.dotnetwork.it/sabrina/archive/2010/10/31/lavorare-con-xml-parte-1.aspx</guid>
            <pubDate>Sun, 31 Oct 2010 22:02:06 GMT</pubDate>
            <wfw:comment>http://community.dotnetwork.it/sabrina/comments/539.aspx</wfw:comment>
            <comments>http://community.dotnetwork.it/sabrina/archive/2010/10/31/lavorare-con-xml-parte-1.aspx#feedback</comments>
            <wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/539.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Debug remoto da Visual Studio 2010 alcuni suggerimenti dal mondo reale.</title>
            <link>http://community.dotnetwork.it/sabrina/archive/2010/10/17/debug-remoto-da-visual-studio-2010-alcuni-suggerimenti-dal-mondo.aspx</link>
            <description>&lt;p&gt;Questo è un post fantasma, io scrivo per ritrovare le note quando servirà, ma sono solo un amanuense, il vero esperimento è stato fatto da Luca, il mio collega che ama moltissimo scrivere codice, ma odia scrivere documentazione, blog, articoli e parlare alle pubbliche conferenze… ho sempre la speranza di convincerlo almeno a scrivere un blog, ma le possibilità sono scarse.&lt;/p&gt;  &lt;p&gt;Ad ogni modo ecco il come si fa:&lt;/p&gt;  &lt;p&gt;Avevamo un comportamento anomalo su una macchina per una applicazione appena installata, la macchina era su un dominio diverso da quello dei PC di sviluppo e volendo fare un remote debug, ecco quello che abbiamo fatto:&lt;/p&gt;  &lt;p&gt;Sulla macchina remota, quando si apre l’applicazione mswsmon, ovvero il remote debugger, sul menu Tools&amp;gt;options si può scegliere fra:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Nessuna autenticazione&lt;/li&gt;    &lt;li&gt;Autenticazione windows&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Provando con la prima, si può debuggare, ma non siamo stati in grado di caricare i debug symbols, pertanto cercare il problema non era proprio semplice senza il codice, anche copiando in locale i files .pdb sulla cartella di installazione non si vedevano i simboli.&lt;/p&gt;  &lt;p&gt;Per poter usare quindi l’opzione 2 abbiamo dovuto fare una serie di cose che elenco di seguito:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Creare un utente locale con stesso nome e stessa password su entrambe le macchine, dandogli privilegi di amministratore (in verità sulla macchina remota crediamo bastino privilegi di Remote Debug.)&lt;/li&gt;    &lt;li&gt;Disattivare i firewall di entrambe le macchine (siamo certi che basta attivare qualche porta, ma essendo nella stessa rete e nello stesso ufficio, questo era più facile.)&lt;/li&gt;    &lt;li&gt;Usando mswsmon sulla macchina remota, loggati con l’utente che poi doveva far girare l’applicazione, abbiamo creato un server chiamato: &lt;a href="mailto:NomeUtente@Nomemecchina"&gt;NomeUtente@Nomemecchina&lt;/a&gt;, dove NomeUtente era il nome dell’utente locale creato precedentemente.&lt;/li&gt;    &lt;li&gt;Loggarsi sulla macchina di sviluppo con l’utente locale e relativa password, aprire Visual Studio 2010, aprire il debug remoto usando Debug&amp;gt;Attach to process e scegliere:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Transport = default(Windows Authentication)&lt;/li&gt;      &lt;li&gt;Qualifier = &lt;a href="mailto:NomeUtente@Nomemacchina"&gt;NomeUtente@Nomemacchina&lt;/a&gt; (quelli del punto 3)&lt;/li&gt;      &lt;li&gt;Cercare il processo, fare doppio click e confermare.&lt;/li&gt;      &lt;li&gt;A questo punto siamo attaccati al processo sulla macchina remota e possiamo debuggarlo.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Abbiamo verificato anche che se abbiamo la medesima versione del programma su entrambe le macchine, se non ci sono i .pdb sulla macchina remota, è possibile usare la finestra Debug&amp;gt;Windows&amp;gt;Modules per cercare la dll o l’exe a cui siamo attaccati e usando il menu contestuale, con il tasto destro, si può caricare i simboli da un file sulla macchina di sviluppo.&lt;/li&gt; &lt;/ol&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:3f8c968d-1e19-4cb2-aada-5025188d33b6" class="wlWriterEditableSmartContent"&gt;Technorati Tag: &lt;a href="http://technorati.com/tags/VS2010" rel="tag"&gt;VS2010&lt;/a&gt;,&lt;a href="http://technorati.com/tags/remote+debug" rel="tag"&gt;remote debug&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/528.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sabrina C.</dc:creator>
            <guid>http://community.dotnetwork.it/sabrina/archive/2010/10/17/debug-remoto-da-visual-studio-2010-alcuni-suggerimenti-dal-mondo.aspx</guid>
            <pubDate>Sun, 17 Oct 2010 14:18:18 GMT</pubDate>
            <wfw:comment>http://community.dotnetwork.it/sabrina/comments/528.aspx</wfw:comment>
            <comments>http://community.dotnetwork.it/sabrina/archive/2010/10/17/debug-remoto-da-visual-studio-2010-alcuni-suggerimenti-dal-mondo.aspx#feedback</comments>
            <wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/528.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Cambio dell&amp;rsquo;owner di un database</title>
            <link>http://community.dotnetwork.it/sabrina/archive/2010/10/16/cambio-dellrsquoowner-di-un-database.aspx</link>
            <description>&lt;p&gt;Oggi sto facendo una operazione davvero rarissima, ovvero sto spostando server e computer da un dominio windows ad uno completamente nuovo.&lt;/p&gt;  &lt;p&gt;Spostando un server con installato SQL Server 2008 dopo lo spostamento sono andata ad aggiornare tutte le mappature dei login su Gruppi/Utenti di dominio e andando a controllare delle cose su di un database attivando l’opzione “Properties” del database, ho avuto un messaggio di errore che mi diceva che, non essendoci un Owner valido sul database non era possibile effettuare l’operazione da me richiesta.&lt;/p&gt;  &lt;p&gt;L’owner del database, viene settato al momento della creazione del database ed è usualmente l’utente che ha creato il database. Se chi crea il database è loggato con una trusted connection o comunque come utente di dominio, lo spostamento del server su un altro dominio provoca una incongruenza su questo database.&lt;/p&gt;  &lt;p&gt;Per risolvere il problema è necessario cambiare l’owner del database, io ho rimappato tutti i database sull’ utente SQL sa in modo che semmai dovesse succedere nuovamente qualcosa del genere non ci sono simili problemi.&lt;/p&gt;  &lt;p&gt;lo script per il change ownership è molto molto semplice:&lt;/p&gt;  &lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;use&lt;/span&gt; NomeDatabase
&lt;span class="kwrd"&gt;exec&lt;/span&gt; sp_changedbowner &lt;span class="str"&gt;'sa'&lt;/span&gt;&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:77c8b2d3-c797-4634-8415-7a97b723956a" 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/TSQL" rel="tag"&gt;TSQL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Database" rel="tag"&gt;Database&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/525.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sabrina C.</dc:creator>
            <guid>http://community.dotnetwork.it/sabrina/archive/2010/10/16/cambio-dellrsquoowner-di-un-database.aspx</guid>
            <pubDate>Sat, 16 Oct 2010 15:07:28 GMT</pubDate>
            <wfw:comment>http://community.dotnetwork.it/sabrina/comments/525.aspx</wfw:comment>
            <comments>http://community.dotnetwork.it/sabrina/archive/2010/10/16/cambio-dellrsquoowner-di-un-database.aspx#feedback</comments>
            <wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/525.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Configurare SQL Server Database Mail per l&amp;rsquo;invio delle Notifiche dei Job</title>
            <link>http://community.dotnetwork.it/sabrina/archive/2010/09/16/configurare-sql-server-database-mail-per-lrsquoinvio-delle-notifiche-dei.aspx</link>
            <description>&lt;p&gt;Oggi dovevo modificare la configurazione del servizio di notifica dei Job di uno dei server SQL dell’azienda, pertanto ho approfittato della cosa per configurare lo stesso servizio su un altro server che fino ad oggi non lo aveva attivo.&lt;/p&gt;  &lt;p&gt;Essendo una operazione che si fa una tantum più o meno ogni 5 anni, riporto gli screenshot di come si fa, in modo da poter fare lo stesso sui server dei clienti per verificare che tutto funzioni.&lt;/p&gt;  &lt;p&gt;Ho configurato un SQL 2008 ma è lo stesso su SQL 2005.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail01_2.jpg" rel="lightbox"&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="tfsmail01" border="0" alt="tfsmail01" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail01_thumb.jpg" width="272" height="148" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Aprire la cartella Management, Selezionare Database Mail.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail02_2.jpg" rel="lightbox"&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="tfsmail02" border="0" alt="tfsmail02" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail02_thumb.jpg" width="544" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Lasciare l’opzione come configurata se è la prima configurazione altrimenti usare l’opzione più opportuna. e premere &lt;strong&gt;NEXT.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail03_2.jpg" rel="lightbox"&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="tfsmail03" border="0" alt="tfsmail03" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail03_thumb.jpg" width="537" height="484" /&gt;&lt;/a&gt;Dare al profilo un nome significativo,  o un nome che vi piace e una adeguata descrizione, dato che il sistema di DB Mail può essere usato anche per altri scopi oltre che per le notifiche dei job, è possibile generare più profili così come è possibile generare più Accounts di posta.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail04_2.jpg" rel="lightbox"&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="tfsmail04" border="0" alt="tfsmail04" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail04_thumb.jpg" width="604" height="484" /&gt;&lt;/a&gt;Fate click sul tasto Add per creare l’account di posta da usare per l’invio delle e-mail, fate attenzione che se ne esiste già uno, non compare immediatamente questa finestra ma compare una finestra che permette di selezionare un account esistente o, premendo un tasto apposito di aprire questa finestra.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail05_2.jpg" rel="lightbox"&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="tfsmail05" border="0" alt="tfsmail05" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail05_thumb.jpg" width="569" height="484" /&gt;&lt;/a&gt;Compilate i dati dell’account con un nome e una descrizione significativa, assegnate gli indirizzi di e-mail indicate il nome del server e le credenziali di autenticazione quando siano necessarie oppure, lasciate l’autenticazione anonima (ad esempio se il server SMTP è interno all’azienda e configurato per il login anonimo).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail06_2.jpg" rel="lightbox"&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="tfsmail06" border="0" alt="tfsmail06" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail06_thumb.jpg" width="547" height="484" /&gt;&lt;/a&gt;A questo punto, è necessario indicare i dati si sicurezza per il profilo, per poter spedire le e-mail dall’Agent che è colui che esegue i job, è opportuno che il profilo sia Pubblico, non Privato.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail07_2.jpg" rel="lightbox"&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="tfsmail07" border="0" alt="tfsmail07" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail07_thumb.jpg" width="541" height="484" /&gt;&lt;/a&gt;A questo punto, ci saranno mostrate 2 schermate di verifica e conferma esecuzione, proseguiamo con NEXT per arrivare a quento mostrato qui sopra.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail08_2.jpg" rel="lightbox"&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="tfsmail08" border="0" alt="tfsmail08" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail08_thumb.jpg" width="156" height="41" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Spostiamoci ora nella cartella Operators che si trova all’interno degli oggetti del Sql Server Agent. E creiamo un nuovo Operatore.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail09_2.jpg" rel="lightbox"&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="tfsmail09" border="0" alt="tfsmail09" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail09_thumb.jpg" width="529" height="484" /&gt;&lt;/a&gt;Ci basta indicare il nome dell’operatore e la e-mail a cui spedire le notifiche, a meno che non vogliate usare anche Net Send ed il Pager.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail10_2.jpg" rel="lightbox"&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="tfsmail10" border="0" alt="tfsmail10" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail10_thumb.jpg" width="537" height="484" /&gt;&lt;/a&gt;In ciascuno dei JOB di Backup, Manutenzione, Esecuzione script o qualsiasi altro tipo di funzionalità, indichiamo l’operatore appena generato, l’uso della e-mail e se vogliamo notificargli Solo gli errori, Tutto oppure solo le esecuzioni andate a buon fine.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail11_2.jpg" rel="lightbox"&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="tfsmail11" border="0" alt="tfsmail11" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail11_thumb.jpg" width="533" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A questo punto, facciamo tasto destro sull’icona dell’Agent e selezioniamo Alert System, andando ad attivare il profilo di posta che abbiamo generato. Se non si effettua questa operazione, l’agent non invierà mai alcuna notifica via e-mail.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail12_2.jpg" rel="lightbox"&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="tfsmail12" border="0" alt="tfsmail12" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/ConfigurareSQLServerDatabaseMailperlinvi_DE7D/tfsmail12_thumb.jpg" width="236" height="96" /&gt;&lt;/a&gt;Una volta terminata la configurazione, facciamo ripartire SQL Server Agent per permettergli di attivare le modifiche alla configurazione del sistema di Alert.&lt;/p&gt;  &lt;p&gt;Da ora in poi, i JOB in cui abbiamo inserito le notifiche, ci avviseranno di qualsiasi cosa accade.&lt;/p&gt;  &lt;p&gt;Possiamo inoltre attivare la notifica per ogni tipo di Alert.     &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:a7c637e8-5f9e-4dc2-b5ed-03cf4c14a465" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/SQLServer+2008/default.aspx" rel="tag"&gt;SQLServer 2008&lt;/a&gt;, &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/Job/default.aspx" rel="tag"&gt;Job&lt;/a&gt;, &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/Alert/default.aspx" rel="tag"&gt;Alert&lt;/a&gt;, &lt;a href="http://community.dotnetwork.it/Sabrina/Tags/Database+Mail/default.aspx" rel="tag"&gt;Database Mail&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/511.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sabrina C.</dc:creator>
            <guid>http://community.dotnetwork.it/sabrina/archive/2010/09/16/configurare-sql-server-database-mail-per-lrsquoinvio-delle-notifiche-dei.aspx</guid>
            <pubDate>Thu, 16 Sep 2010 13:51:02 GMT</pubDate>
            <wfw:comment>http://community.dotnetwork.it/sabrina/comments/511.aspx</wfw:comment>
            <comments>http://community.dotnetwork.it/sabrina/archive/2010/09/16/configurare-sql-server-database-mail-per-lrsquoinvio-delle-notifiche-dei.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/511.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Collection e predicati cercare elementi senza cicli</title>
            <link>http://community.dotnetwork.it/sabrina/archive/2010/08/13/collection-e-predicati-cercare-elementi-senza-cicli.aspx</link>
            <description>&lt;p&gt;Una delle cose che risultano essere più utili, quando si lavora con le collezioni, sono i metodi di Ricerca, che ci permettono di trovare un elemento della collezione utilizzando come criterio una o più delle sue proprietà. Questi metodi, possono essere creati sia come Indexer, ovvero le property che ci permettono di trovare un elemento passando il valore di una o più proprietà dello stesso, oppure come metodi specifici. Questa seconda opzione, si utilizza perché spesso ci possono essere più property dello stesso tipo che possono essere usate per la ricerca, pertanto non è possibile creare degli indexer per tutte loro. Lavoriamo su un esempio:&lt;/p&gt;
&lt;p&gt;La classe Entity, da noi definita che chiameremo AnagraficaAzienda, espone le seguenti proprietà:&lt;/p&gt;
&lt;pre class="CSharpFormat"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; DescrizioneRicerca
&lt;span class="kwrd"&gt;string&lt;/span&gt; RagioneSociale
&lt;span class="kwrd"&gt;string&lt;/span&gt; PartitaIva
&lt;span class="kwrd"&gt;string&lt;/span&gt; Indirizzo
&lt;span class="kwrd"&gt;string&lt;/span&gt; CAP
&lt;span class="kwrd"&gt;string&lt;/span&gt; Citta
&lt;span class="kwrd"&gt;string&lt;/span&gt; PV
&lt;span class="kwrd"&gt;int&lt;/span&gt; IDTipo
&lt;span class="kwrd"&gt;int&lt;/span&gt; IDAnagrafica&lt;/pre&gt;
&lt;p&gt;Per creare un Indexer per cercare dati usando la Descrizione di Ricerca possiamo usare questo codice:&lt;/p&gt;
&lt;pre class="CSharpFormat"&gt;public AnagraficaAzienda &lt;span class="kwrd"&gt;this&lt;/span&gt;[&lt;span class="kwrd"&gt;string&lt;/span&gt; pDescrizioneRocerca]
{
    get
    {
        &lt;span class="kwrd"&gt;return&lt;/span&gt;( Find(item=&amp;gt;item.DescrizioneRicerca==pDescrizioneRicerca);
    }
}&lt;/pre&gt;
&lt;p&gt;per creare un metodo che ritorna una lista dei dati in cui la ragione sociale soddisfa una regular expression:&lt;/p&gt;
&lt;pre class="CSharpFormat"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;AnagraficaAzienda&amp;gt; FindWithRegEx( &lt;span class="kwrd"&gt;string&lt;/span&gt; pRegEx )
{
    &lt;span class="kwrd"&gt;return&lt;/span&gt; (FindAll(items =&amp;gt; Regex.Match(items.RagioneSociale, pRegEx).Success));
}&lt;/pre&gt;
&lt;p&gt;per creare un metodo che ritorna una anagrafica con una determinata partita IVA:&lt;/p&gt;
&lt;pre class="CSharpFormat"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; AnagraficaAzienda FindXPartitaIva(&lt;span class="kwrd"&gt;string&lt;/span&gt; pPartitaIva)
{
    &lt;span class="kwrd"&gt;return&lt;/span&gt;( Find(item=&amp;gt;item.PartitaIva==pPartitaIva);
}&lt;/pre&gt;
&lt;p&gt;Per creare un indexer multi dimensionale possiamo usare il seguente codice&lt;/p&gt;
&lt;pre class="CSharpFormat"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; AnagraficaAzienda &lt;span class="kwrd"&gt;this&lt;/span&gt;[&lt;span class="kwrd"&gt;int&lt;/span&gt; pIDZona, &lt;span class="kwrd"&gt;int&lt;/span&gt; pIDAnagrafica]
{
    get
    {
        &lt;span class="kwrd"&gt;return&lt;/span&gt;( Find(item=&amp;gt;item.IDZona==pIDZona &amp;amp;&amp;amp; item.IDAnagrafica==pIDAnagrafica);
    }
}&lt;/pre&gt;
&lt;p&gt;Come possiamo vedere, un predicato ci permette di indicare una qualsiasi espressione binaria quale criterio di ricerca.&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:677451c8-0e78-48f4-b0b6-79d9ea72d764" class="wlWriterEditableSmartContent"&gt;Tags: &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/Collection/default.aspx"&gt;Collection&lt;/a&gt;, &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/Predicate/default.aspx"&gt;Predicate&lt;/a&gt;, &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/Find/default.aspx"&gt;Find&lt;/a&gt;, &lt;a rel="tag" href="http://community.dotnetwork.it/Sabrina/Tags/FindAll/default.aspx"&gt;FindAll&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/489.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sabrina C.</dc:creator>
            <guid>http://community.dotnetwork.it/sabrina/archive/2010/08/13/collection-e-predicati-cercare-elementi-senza-cicli.aspx</guid>
            <pubDate>Fri, 13 Aug 2010 15:02:28 GMT</pubDate>
            <wfw:comment>http://community.dotnetwork.it/sabrina/comments/489.aspx</wfw:comment>
            <comments>http://community.dotnetwork.it/sabrina/archive/2010/08/13/collection-e-predicati-cercare-elementi-senza-cicli.aspx#feedback</comments>
            <wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/489.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Come generare un Guid.Empty in SQL</title>
            <link>http://community.dotnetwork.it/sabrina/archive/2010/08/10/come-generare-un-guid.empty-in-sql.aspx</link>
            <description>&lt;p&gt;Venerdì scorso, il mio collega Luca stava litigando con un problema determinato da valori null, DbNull e Guid in una classe che si occupa di  effettuare query su Database.&lt;/p&gt;  &lt;p&gt;La classe Guid, è una classe di tipo Value Type, pertanto non è nullabile. Per contro, nelle Stored Procedure, io utilizzo il valore DbNull come indicatore di Default per indicare che un parametro di filtro è vuoto e deve quindi essere ignorato.&lt;/p&gt;  &lt;p&gt;Modificare parecchie classi C# per trasformare il Guid in un Nullable Guid diveniva complicato e non facile da gestire e aggiornare, pertanto abbiamo provato a ragionare ed è risultato che se avessimo potuto usare un Guid.Empty nelle nostre stored procedure (o nelle query ad hoc), avremmo risolto il problema senza complicate manovre.&lt;/p&gt;  &lt;p&gt;Facendo varie prove siamo stati in grado di produrre la seguente Scalar Function:&lt;/p&gt;  &lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;FUNCTION&lt;/span&gt; Guid_Empty()
&lt;span class="kwrd"&gt;RETURNS&lt;/span&gt; UniqueIdentifier
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;
&lt;span class="kwrd"&gt;RETURN&lt;/span&gt; &lt;span class="kwrd"&gt;cast&lt;/span&gt;(&lt;span class="kwrd"&gt;cast&lt;/span&gt;(0 &lt;span class="kwrd"&gt;as&lt;/span&gt; &lt;span class="kwrd"&gt;binary&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; uniqueidentifier)
&lt;span class="kwrd"&gt;END&lt;/span&gt;
GO&lt;/pre&gt;

&lt;p&gt;Dopo aver generato la funzione qui sopra ed una semplice tabella nel mio famigerato database di test, sono stata in grado di scrivere la query seguente:&lt;/p&gt;

&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; [ID]
      ,[Descrizione]
      ,[Prezzo]
      ,[Quantità]
      ,[Umi]
      ,IsNull(AltGuid, dbo.Guid_EMPTY()) &lt;span class="kwrd"&gt;AS&lt;/span&gt; Alt
  &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [paperinik].[dbo].[TbRighe]&lt;/pre&gt;

&lt;p&gt;Che produce la seguente tabella risultante:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/HowtocreateaGuid.EmptyinSQL_141CA/guidquery_2.jpg" rel="lightbox"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="guidquery" border="0" alt="guidquery" src="http://community.dotnetwork.it/images/community_dotnetwork_it/sabrina/WindowsLiveWriter/HowtocreateaGuid.EmptyinSQL_141CA/guidquery_thumb.jpg" width="644" height="104" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Posso inoltre usare la mia funzione per creare la query seguente:&lt;/p&gt;

&lt;pre class="TsqlFormat"&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; [ID]
      ,[Descrizione]
      ,[Prezzo]
      ,[Quantità]
      ,[Umi]
      ,IsNull(AltGuid, dbo.Guid_EMPTY()) &lt;span class="kwrd"&gt;AS&lt;/span&gt; Alt
  &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [paperinik].[dbo].[TbRighe]
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;
IsNull(AltGuid, dbo.Guid_EMPTY()) = dbo.Guid_EMPTY()&lt;/pre&gt;

&lt;p&gt;Che mi permette di filtrare le righe con Guid.Empty oppure posso usare l’operatore &amp;lt;&amp;gt; per cercare le sole righe con un Guid non vuoto. Usando questo tipo di Query, posso tranquillamente passare come parametro il Guid.Empty di C# come filtro senza la necessità di creare un Guid nullable o implementare complicate espressioni di controllo nelle mie classi.&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:06fc812e-6fbb-411a-9fb5-c5c256bbe9e0" 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/C%23" rel="tag"&gt;C#&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Guid" rel="tag"&gt;Guid&lt;/a&gt;&lt;/div&gt;&lt;img src="http://community.dotnetwork.it/sabrina/aggbug/485.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Sabrina C.</dc:creator>
            <guid>http://community.dotnetwork.it/sabrina/archive/2010/08/10/come-generare-un-guid.empty-in-sql.aspx</guid>
            <pubDate>Tue, 10 Aug 2010 21:05:11 GMT</pubDate>
            <wfw:comment>http://community.dotnetwork.it/sabrina/comments/485.aspx</wfw:comment>
            <comments>http://community.dotnetwork.it/sabrina/archive/2010/08/10/come-generare-un-guid.empty-in-sql.aspx#feedback</comments>
            <wfw:commentRss>http://community.dotnetwork.it/sabrina/comments/commentRss/485.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>
