Roberto Brunetti

Developing in the cloud

.NET Programming

aprile 2006 - Posts

SQL 2005 Mobile Upgrade Tool

L'upgrade di una struttura SQLCE 1.0 o 2.0 verso la versione 3.0 (Sql 2005 Mobile) si effettua con un tool a riga di comando denominato upgrade.exe. Purtroppo tale utility gira solo sul device, di conseguenza non è possibile eseguire l'upgrade del db su una macchina desktop. Il secondo problema è che l'utility crea una nuova struttura e la riempie con i dati presenti sul vecchio SDF direttamente sul device quindi serve sufficiente spazio libero sul device per contenere i due database.

Come per tutti i prodotti Windows CE occorre copiare l'utility per il processore e per piattaforma corretta sul device. Upgrade.exe lo trovate sotto x:\program files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\v3.0\. Da quì si trova per prima la sottodirectory relativa alla piattaforma (windows ce 5.0 o windows CE 4.2: ricordo che i Pocket PC 2003 e gli SmartPhone 2003 sono basati su Windows CE 4.2) e poi la sottodirectory relativa al tipo di processore.

L'utility a riga di comando occupa circa 300KB in memoria durante l'esecuzione e va lanciata dal command prompt del device. Nalla stessa directory da cui viene lanciato viene creato il file upgrade.log con i dettagli dell'upgrade e eventuali errori.

Importante: se il DB è in replica con RDA oppure Merge Replication occorre effettuare prima una sincronizzazione per sincronizzare le modifiche locali con il server. Se non si effettua la sincronizzazione non vengono persi i dati in locale ma vengono perse le informazioni sulle modifiche locali effettuate e quindi una successiva sincronizzazione non eseguirebbe l'upload delle modifiche locali verso il server.

Posted: apr 29 2006, 03.35 by rob | with no comments
Filed under: ,
BeginUpdate - SuspendLayout

Sui device basati su Windows Ce il disegno dei bit (pixel) sullo schermo non è velocissimo: mancano le schede grafiche a cui siamo abituati sui desktop. Tutte le volte che occorre eseguire più operazioni che modifichino un controllo sullo schermo conviene quindi adottare alcune tecniche per evitare il "repaint" ad ogni modifica. Queste tecniche sono valide anche sul Desktop dove comunque, per il motivo indicato, si soffre molto meno.

Ad esempio:
1) Riempire un controllo con una serie di dati (Add su una ListBox)
2) Spostare e modificare la dimensione di un controllo nello stesso tempo
3) Eseguire il binding di dati con BindingSource o tramite DataSource

Alcuni controlli espongono i metodi BeginUpdate e EndUpdate che consentono di prevenire il repainting (in generale il disegno) del controllo durante l'aggiunta di dati. I controlli che supportano tali metodi sono ListBox, ComboBox, ListView, TreeView. Visto il .NET CF non dispone del metodo AddRange, utilizzato sul desktop per aggiungere una serie di elementi ai controlli, è bene utilizzare questi metodi per sospendere il disegno durante il popolamento di dati. Anche DataGridColumnStyle supporta tali metodi. Un vecchio trucco ancora valido per i controlli che non supportano tali metodi, è quello di impostare il controllo invisibile (Visible=false), popolarlo di dati e poi riportarlo Visible=true.

Non ci credete che si va più forte ? Provate. Ero da un cliente settimana scorsa in cui una query di rimpimento di una griglia impiegava 24 secondi circa...bene, è bastato un Visible=false/Visible=true sull'intero controllo DataGridView per passare a ....4 secondi. In pratica si evita che il controllo si disegni per l'aggiunta di ogni record/campo, comprese le toolbar di scorrimento orizzontale e verticale che ad ogni record devono essere ricalcolate e disegnate.

I metodi SuspendLayout consente invece di sospendere la logica di layout consentendo di modificare più attributi (che ne modificano la visualizzazione) con performance maggiori. Ad esempio se dobbiamo spostare e allargare un controllo sul form conviene sospendere il layouting, impostare le varie proprietà (Location, Size, Dock, Anchor, ecc) e poi riabilitare il tutto. Conviene usare questa tecnica anche per aggiungere una serie di controlli su un controllo container. Ad esempio per aggiungere dinamicamente da codice una serie di controlli a un Form, a un Panel o a un TabControl conviene sospendere il layout dal container, aggiungere i controlli e riabilitare il layout (es. Form.ResumeLayout).
Questa tecnica viene usata anche da Visual Studio 2003 e 2005 nella sezione "region Windows Form Designer generated code" che vi riporto (un po' tagliata e con qualche commento in rosso per chiarezza) da una mia applicazione reale.


        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.mainMenu = new System.Windows.Forms.MainMenu();
            this.cmdAllBaseTableCursor = new System.Windows.Forms.Button();
            this.cmdAllSelectFieldsRSPrepared = new System.Windows.Forms.Button();
            this.cmdAllSelectFieldsDRPrepared = new System.Windows.Forms.Button();
            this.cmdAllSelectFieldsRS = new System.Windows.Forms.Button();
            this.cmdAllSelectFieldDataReader = new System.Windows.Forms.Button();
            this.cmdAllSelectFieldsDT = new System.Windows.Forms.Button();
            this.cmdAllSelectFieldsDS = new System.Windows.Forms.Button();
 
            ...Altri Controlli ...

            // Come si nota VS sospende il layout per tutti i container definiti
            this.tabDALNoDAL.SuspendLayout();
            this.tabAll.SuspendLayout();
            this.tabRange.SuspendLayout();
            this.tabSingle.SuspendLayout();
            this.SuspendLayout();
            //
            // tabDALNoDAL
            //
            this.tabDALNoDAL.Controls.Add(this.cmdFillPrepared);
            this.tabDALNoDAL.Controls.Add(this.txtQuanti);
            this.tabDALNoDAL.Controls.Add(this.cmdFill);
            this.tabDALNoDAL.Location = new System.Drawing.Point(0, 0);
            this.tabDALNoDAL.Name = "tabDALNoDAL";
            this.tabDALNoDAL.Size = new System.Drawing.Size(240, 190);
            this.tabDALNoDAL.Text = "Fill";
            //
 
            //
            this.tabAll.Controls.Add(this.cmdAllBiz);
            this.tabAll.Controls.Add(this.cmdAllBaseTableCursor);
            this.tabAll.Controls.Add(this.cmdAllSelectFieldsRSPrepared);
            this.tabAll.Controls.Add(this.cmdAllSelectFieldsDRPrepared);
            this.tabAll.Controls.Add(this.cmdAllSelectFieldsRS);
            this.tabAll.Controls.Add(this.cmdAllSelectFieldDataReader);
            this.tabAll.Controls.Add(this.cmdAllSelectFieldsDT);
            this.tabAll.Controls.Add(this.cmdAllSelectFieldsDS);
            this.tabAll.Controls.Add(this.cmdAllSelectStarDS);
            this.tabAll.Location = new System.Drawing.Point(0, 0);
            this.tabAll.Name = "tabAll";
            this.tabAll.Size = new System.Drawing.Size(232, 187);
            this.tabAll.Text = "All";


     ... Altri controlli...

     // Parte Finale
            this.MinimizeBox = false;
            this.Name = "frmMain";
            this.Text = "Form1";
            this.tabControl1.ResumeLayout(false);
            this.tabDALNoDAL.ResumeLayout(false);
            this.tabAll.ResumeLayout(false);
            this.tabRange.ResumeLayout(false);
            this.tabSingle.ResumeLayout(false);
            this.ResumeLayout(false);

        }

        #endregion


Come si nota nel codice vengono creati i controlli container, viene sospeso il layout, aggiunti i controlli e poi riabilitato (riesumato :-)) il layout.

Vedremo queste tecniche anche alla prossima FWC del 4 maggio mettendo in mezzo anche un po' di multithreading per completare il panorama.

Posted: apr 27 2006, 07.42 by rob | with no comments
Filed under: ,
SQL 2005 Express Toolkit

Il Toolkit fornisce strumenti e risorse aggiuntive per SQL 2005 Express e SQL 2005 Express with Advanced Services.

Contiene SQL Server 2005 Management Studio Express, BI Development Studio e lo strumento per creare e gestire report con Reporting Services.

Se continuano così fra un po' mancheranno solo i servizi di clustering alla versione Express...e non possiamo che essere contenti.

Posted: apr 22 2006, 09.52 by rob | with no comments
Filed under:
SQL 2005 Express with Advanced Services

Pubblicata la nuova versione di SQL Express che offre

  • Interfaccia di amministrazione (SSMSE)
  • Full Text Query
  • Reporting Services sul database locale

Tutto Free.

Posted: apr 22 2006, 09.50 by rob | with 1 comment(s)
Filed under:
SQL 2005 Service Pack 1

Uscito. Per tutte le versioni, tranne la Express, http://www.microsoft.com/downloads/details.aspx?familyid=cb6c71ea-d649-47ff-9176-e7cac58fd4bc&displaylang=en

Per aggiornare Express occorre scaricare la versione Express con SP: http://msdn.microsoft.com/vstudio/express/sql/download/

Il Readme: http://www.microsoft.com/downloads/details.aspx?familyid=b0167129-5ac8-49c4-90bd-0493f3773081&displaylang=en

Posted: apr 22 2006, 09.44 by rob | with 5 comment(s)
Filed under:
News su telefonia, VOIP, TV digitale

Riporto dalla newsletter di week.it. Anche l'Italia si sta un po' svegliando. Date un occhio.

È PRIMAVERA, IL TELEFONO SI RISVEGLIA
In Italia arrivano gli operatori virtuali di telefonia cellulare. Come Virgin in Inghilterra, non hanno reti ma offrono telefonate a basso costo. E l'aria si fa frizzante anche per il VoIp
http://www.weekit.it/37712

SKYPE ARRIVA ANCHE IN ITALIA
Gli utenti italiani potranno avere un numero col prefisso 5 per ricevere le chiamate. Partono i negoziati con operatori mobili e provider Internet http://www.weekit.it/37713

UN NUMERO SOLO PER VOIP, FAX, EMAIL E CELLULARE
Interoute propone un'offerta VoIp flat: un canone per singola azienda, con chiamate ai numeri fissi di tutto il mondo
http://www.weekit.it/37715


TV DIGITALE SUL TELEFONINO INTESA VODAFONE-MEDIASET
La decisione del Garante di affidare la gestione delle frequenze per il Dvb-h ai broadcaster e non ai carrier ha affrettato i tempi per l’accordo
http://www.weekit.it/37722

Posted: apr 21 2006, 09.37 by rob | with no comments
Filed under:
Tonnellate di Code Snippet per VS 2005

Si scaricano da quì: http://msdn.microsoft.com/vstudio/downloads/codesnippets/default.aspx

Ce ne sono per tutti i gusti, dalle collection al refactoring, dagli attributi ai più classici.

SQL 2005 Mobile Replication

Articolo da me pubblicato su Week.it (19/01/2006):

A novembre 2005, dopo una lunga attesa, è uscita la nuova versione di SQL CE, la 3.0 denominata per uniformità SQL Server 2005 Mobile Edition. Le varie librerie disponibili per lo sviluppatore riportano comunque la versione 3.0.x.x. Abbiamo dato una preview a novembre 2004 di quelle che sarebbero state le nuove caratteristiche: http://www.weekit.it/index.php?option=com_content&task=view&id=31766&Itemid=156. L'articolo resta valido, nel senso che il prodotto finale ha rispettato le caratteristiche annunciate; unica nota: nell'articolo si parlava di DTS quando invece il nome corretto in SQL Server 2005 è SSIS (SQL Server Integration Services). Entriamo un po' più nel dettaglio di alcune caratteristiche salienti.

Lato client è possibile invocare il metodo BeginSynchronize per avviare una Merge Replication in modalità asincrona: così facendo si evita di bloccare l'interfaccia utente durante la replica senza dover creare e gestire da codice i thread necessari; inoltre SQL 2005 Mobile supporta l'accesso concorrente quindi è possibile lavorare con i dati durante una sincronizzazione. Durante la Merge Replication è possibile intercettare gli eventi di inizio replica, fine replica, sincronizzazione per ogni tabella (Article) coinvolta segnalando, ad esempio all'utente, il progredire della replica. Tramite il metodo Cancel è possibile anche abortire l'operazione.

Nel caso di Merge Replication con un publisher SQL Server 2005 viene abilitato di default il Column Level Tracking per sincronizzare solo i campi modificati di ogni record al posto dell'intero record migliorando notevolmente i tempi e la banda necessaria alla replica. Sempre con SQL Server 2005 è possibile indicare tabelle "download only" che non verranno più sincronizzate: questa opzione è molto utile per tutte le tabelle che non necessitano di modifiche sul client Windows CE, come ad esempio le tabelle di lookup che normalmente vengono gestite centralmente. Per ogni database SDF si possono indicare più subscription sia verso SQL Server 2005 che SQL Server 2000 eliminando la necessità di creare database locali diversi per ogni subscription: questa opzione è utilissima per definire tempistiche diverse per gruppi di tabelle; ad esempio si può eseguire una sincronizzazione della tabella clienti ogni settimana e della tabella ordini ogni due ore.

 

Posted: apr 09 2006, 06.37 by rob | with no comments
Filed under:
Virtual Server Gratuito

Dopo VMWare Server, anche Microsoft Virtual Server diventa grauito: http://www.microsoft.com/windowsserversystem/virtualserver/default.mspx

Ormai lo strato di virtualizzazione sta diventando una commodity che le varie piattaforme offrono grauitamente come ormai accade per altre commodity come lo stack TCP/IP, il supporto alla rete e così via.

La virtualizzazione entrerà sempre di più nelle nostre aziende: alla DevCon 2006 avremo ben 2 sessioni sulla virutalizzazione (ripetute entrambe 3 volte per dare a chiunque la possibilità di seguirle). La prima sarà tenuta da IBM e vedrà al luce a brevissimo nell'agenda della conferenza. La seconda, già online, sarà tenuta da Alessandro Perilli estremamente competente in materia: ricordo ancora quando lavoravamo insieme in Mondadori Informatica e lui ci "stressava" con la virtualizzazione che a quei tempi sembrava una cosa da sistemisti e invece, sempre di più coinvolgerà il mondo degli sviluppatori durante lo sviluppo, il deploy e la manutenzione dei software. Pensate anche semplicemente a cosa vuol dire portare dal cliente l'intera macchina virtuale, installata internamente con tutto quanto serve all'applicazione, al posto di portare un setup...

Posted: apr 04 2006, 05.43 by rob | with no comments
Filed under: