LoaderLock was detected – Autocad 2006 e Visual Studio 2005

Avviando l'esecuzione in modalità debug di una dll creata in Visual Studio 2005 per Autocad 2006 si riceve l'errore:

LoaderLock was detected

Message: Attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.

E' sufficiente modificare la seguente chiave del registro di Windows:

[HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFramework]

aggiungendo il valore stringa:

MDA = 0
Share

L’intellisense nel web.config smette di funzionare

Mi è capitato di non riuscire più ad utilizzare l'intellisense nel web.config in Visual Studio 2005.

Il problema è sorto dopo l'utilizzo dell'Asp.Net Configuration (noto anche come Web Admin).

Sembra che si tratti di un bug che inserisce un xmls errato nel tag <configuration> all'inizio del web.config.

Il workaround è semplice: per ripristinare l'intellisense nel web.config rimuove l'attributo xmls dal tag configuration.

il tag deve essere semplicemente: <configuration>
"Intellisense everywhere" dice Microsoft… Mi sa che a breve dovrà rilasciare un Service Pack per Visual Studio 2005

Share

Refactoring in VB.Net per Visual Studio 2005

Il refactoring è l'attività legata alla riorganizzazione del codice sorgente al fine di migliorarne la leggibilità, la manutenibilità e le prestazioni.

In Visual Studio 2005 gli sviluppatori C# hanno a disposizione il nuovo menù che si chiama Refactor che fornisce strumenti automatizzati per creare, ad esempio, un metodo dal codice oppure per creare interfacce o incapsulare parametri privati.

Il menù non è disponibile in Visual Basic .Net ma un partner Microsoft ha rilasciato una addin per fare il refactoring.

L'addin non inseirsce nessun menù in Visual Studio ma fornisce direttamente un menù contestuale sulle parti di codice che possono essere oggetto di refactoring.

Alcune funzionalità di refactor in VB.Net

Encapsulate Field

Selezionando una variabile all'intero della classe è possibile creare la corrispondente property per incapsularla

Extract Method

Selezionando una porzione di codice all'interno di un metodo l'addin estrae il codice e crea un nuovo metodo, effettuandone la chiamata e inserendo eventuali parametri.

Create Overload

Selezionando un metodo è possibile creare un metodo di overload. Nel metodo di overload è possibile decidere quali parametri rimuovere: i parametri rimossi diventano automaticamente variabili locali al metodo per invocare il metodo overloaded.

Reorder Parameters

E' possibile cambiare l'ordine dei parametri di un metodo. L'addin ricerca tutte le chiamate a quel metodo e consente di modificare singolarmente o in blocco l'ordine dei parametri di tutti i chiamnti.

Reverse Conditional

Dato un costrutto if .. then … else… è possibile invertire la condizione sul test. Ad esempio:

if x = 0 orelse y=0 then

else

end if

diventa

if x<>0 AndAlso y<>0  then

else

end if

Ulteriori informazioni

Informazioni sull'addin e sul download sono disponibili su:

http://msdn.microsoft.com/vbasic/downloads/tools/refactor/

e direttamente dal produttore:

http://www.devexpress.com/Support/BestPractices/IDE/Refactor/

 

Share

SQL Server Management Studio e SQL 2000

Ho iniziato una graduale transizione verso SQL 2005.

Visto però che il 90% dei progetti in corso utilizza SQL 2000, cerco di sfruttare tutte le nuove potenzialità mantenendo il più alto possibile la compatibilità con il passato.

Utilizzare SQL Server Management Studio con SQL 2000

Ho iniziato ad usare SQL Server Management Studio con i database SQL 2000 e devo dire che per ora non ho riscontrato problemi.

L'accesso a SQL 2000 è semplicissimo. Dall'"Object Explorer" selezionare "Connect->Database Engine", scegliere il server, inserire le credenziali di accesso e il gioco è fatto.

A questo punto si può accedere al database che risulta subito strutturato nelle cartelle tipiche di SQL 2005.

Gestire i server registrati e importarli dall'Enterprise Manager di SQL 2000

Per visualizzare l'elenco dei server registrati in Management Studio selezionare il menù:

View -> Registered Servers

Da qui è possibile importare ed esportare i server registrati in Management Studio e soprattutto importare i server precedentemente registrati nell'Enterprise Manager di SQL 2000.

Nel pannello "Registered Servers" cliccare con il tasto destro del mouse e selezionare:

Previously Registered Servers

Compare il seguente messaggio di conferma:

"Add SQL Server 2000 Enterprise Manager registered servers from this computer into Microsoft SQL Server Management Studio? Adding the server registration information has no effect on the servers themselves. Any registered servers in Microsoft SQL Server Management studio with the same name as the one being imported will be overwritten." 

Premere "Yes" e nell'elenco dei server registrati compare la stessa struttura presente nell'Enterprise Manager

Query Analyzer in SQL 2005

 Una delle caratteristiche che preferisco di SQL Server Management Studio è l'integrazione con il Query Analyzer che non è più un tool separato ma compare ovunque all'interno dell'IDE.

Particolarmente utile è la possibilità di eseguire le stored procedure.

Eseguire le Stored Procedure in SQL Server Management Studio

Basta cliccare col destro sulla stored procedure e selezionare "Execute Stored Procedure…". Nella finestra di dialogo che si apre si possono impostare i parametri (se ce ne sono) e premendo ok la stored procedure viene eseguita esattamente con in query analyzer solo che anche i parametri sono già compilati.

Come nel Query Analyzer vengono visualizzati i Messaggi ed i Risultati ma si può richiedere l'Estimated Execution Plan.

L'esecuzione della Stored Procedure può avvenire anche allo stesso modo del Query Analyzer cliccando col destro e selezionando "Script Stored Procedure as -> EXECUTE TO".

Share

Intercettare l’evento click di un DataGridViewButtonColumn di una DataGridView

Se da una DataGridView si vuole intercettare l'evento di click su di una DataGridViewButtonColumn è necessario scrivere un paio di righe di codice.

Nell'esempio seguente si suppone che la colonna contenente il bottone si chiami 'colEdit' ed è stata utilizzata per aprire una form di dettaglio.

Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

If e.ColumnIndex = Me.DataGridView1.Columns("colEdit").Index Then

 Dim frm As New frmCommessa

 frm.ShowDialog()

End If

End Sub

Share

Technical Conference 2005: uno sguardo al futuro e ritorno

Ieri si è tenuta a Milano la prima tappa italiana della Technical Conference 2005 di Microsoft (la seconda ed ultima tappa si terrà a Roma il 22 novembre).

E' stata una giornata lunga (soprattutto per me che son partito e tornato a Bologna in giornata) ma sicuramente ha offerto interessanti spunti sul futuro dello sviluppo da un lato e dei nuovi prodotti che entraranno nelle aziende dall'altro.

 Innanzitutto complimenti all'organizzazione (ma non c'era da dubitare) che è riuscita a gestire 2.600 persone senza alcun problema (l'unica pecca è che è stato distribuito poco caffè…). In particolare ho apprezzato il servizio di navetta che dalla stazione ci ha portato all'evento e ritorno (all free, of course, che è ciò che interessa principalmente).

Vediamo più in dettaglio quali sono state le sessioni.

L'evento è cominciato con una sessione plenaria di presentazione di ciò che ha fatto Microsoft per noi. In pratica dopo una prima autocelebrazione di quanto Microsoft sia più brava, più bella, e più simpatica dei concorrenti (in particolare come sempre aleggiava lo spettro di Oracle), c'è stata una prima track a 6 mani per fornire il contenitore dell'intera giornata.

In pratica si parte da una società di startup che vuole iniziare a vendere prodotti tramite internet, con un budget limitato ma senza precludersi possibilità per il futuro.

La soluzione? Partire con Visual Studio 2005 Express Edition e SQL Server 2005 Express (entrambi scaricabili gratuitamente dal sito Microsoft).

E' stato creato un backoffice client – server per la gestione dei prodotti e degli ordini ed un front-end web per mostrare il catalogo prodotti ai potenziali clienti ed accettare gli ordini.

Con il crescere della società sono state aggiunte feauture e prodotti sempre sotto il controllo dei 3 soci:

  • l'architect, che vive di Visio e Biztalk Server 2006
  • il db administrator, che relaziona tutto usando SQL Server 2005
  • lo sviluppatore, che manda avanti la baracca facendo tutto quello che chiedono ai piani alti

 Dopo questa prima sessione sono iniziati i 3 percorsi corrispondenti ai 3 ruoli descritti:

  • Percorso avanzato
  • Percorso per professionisti IT e amministratori di database
  • Percorso per sviluppatori

Non avendo il dono dell'ubiquità ed essendo ancora digiuno dei concetti base dei prodotti 2005, ho seguito il percorso per sviluppatori.

A sua volta questo percorso si è svolto attraverso 4 track di un'ora ciascuna:

  1. Visual Studio Team System: software per fare il software
  2. Sviluppare una soluzione completa con Visual Studio 2005 e SQL Server 2005 – Parte 1
  3. Sviluppare una soluzione completa con Visual Studio 2005 e SQL Server 2005 – Parte 2
  4. Sviluppare una soluzione completa con Visual Studio 2005 e SQL Server 2005 – Parte 3

Visual Studio Team System: software per fare il software

In questa ora sono state mostrate le caratteristiche e soprattutto gli strumenti inseriti nell'IDE delle varie versioni di Visual Studio 2005 soffermandosi in particolare sugli strumenti di collaborazione, di bug tracking, di debugging e di testing inseriti nell'ambiente integrato.

Sviluppare una soluzione completa con Visual Studio 2005 e SQL Server 2005

Sono state 3 ore di demo continuativa senza alcun lucido per mostrare sul campo il funzionamento di Visual Studio per lo sviluppo di applicativi Client – Server, Web e per Pocket PC.

Sono stati mostrati alcuni dei nuovi controlli inseriti nell'ambiente (alcuni in quanto sono veramente molti) sia per lo sviluppo di applicativi client-server che per lo sviluppo web, ponendo in particolare l'accento sulle nuove modalità per fare il binding dei dati con le form e le web-form. Il tutto come sempre con tanto drag&drop e la promessa di scrivere meno codice. Sono sempre un po' scettico su questa affermazione ricorrente però le premesse mostrate alla demo sono interessanti.

Ho particolarmente apprezzato la possibilità di fare binding non più soltanto con un database ma con un DataObject in modo da favorire lo sviluppo di architetture a 3 livelli.

Installare e distribuire gli aggiornamenti: ClickOnce

Di sicuro interesse è la tecnologia ClickOnce che consente di effettuare il deploy d un applicativo client-server su di un server web.
Cliccando sul link dell'applicativo questo viene installato sul computer locale ed è immediatamente disponibile senza l'utilizzo di nessun ActiveX.
La cosa interessante è che si possono scegliere due modalità di distribuzione:
– temporanea: l'applicativo non viene lasciato sul client ma risiede nella temp
– nel menù Start -> Programmi: e quindi installato in locale come qualunque programma

Alla prima installazione vengono verificati i prerequisiti (quali Framework 2.0 o SQL Express 2005) ed eventualmente installati in automatico.
Vi assicuro che la demo di questa tecnologia ha suscitato molto interesse.

La separazione tra grafica e codice: Master Pages e Themes

Per quanto riguarda il mondo web particolare risalto è stato dato al concetto della Master Pages e degli Skin che dovrebbe dare un'ulteriore spinta in avanta alla tanto desiderata separazione tra il codice e la grafica.

Con l'utilizzo delle Master Pages si definisce un template che funge da "matrice" per tutte le pagine del sito (nulla di nuovo, è esattamente ciò che offre Dreamweaver). Accedendo ad una pagina che si basa su template si possono solo aggiungere componenti senza modificare il template sottostante.

Gli skin consentono invece di avere grafiche diverse per clienti diversi: è molto simile al concetto di Tema in windows, lo skin è una collezione di CSS ed immagini che vengono applicate ai web controls.

Sono state mostrate all'opera le Web Parts che consentono di definire aree della pagina che possono essere personalizzate. Ogni area può essere eliminata o spostata tramite drag&drop, le caratteristiche di ogni web part sono personalizzabili e gestibili con diversi ruoli di accesso.

Login, Registrazione, Ruoli e dintorni

Un altro po' di tempo è stato speso per mostrare i controlli che forniscono tutta la plumbing per il login di un utente, la sua registrazione, il collegamento ad un profilo già esistente nel database e la gestione di tutti i parametri di autenticazione.

In particolare tutte le voci di authentication e authorization presenti nel web.config primario e nei web.config nelle sottocartelle possono adesso essere gestite tramite una pagina web.

I Gadgets

Last but not least i tanto attesi gadgets promessi da Microsft.

Non ho ancora provveduto alle installazioni ma devo dire che il materiale fornito è tanto e di alta qualità.

La parte più interessane è il pacchetto con:

  • SQL Server 2005 Standard Edition (1 CAL), versione NFR (not for resale)
  • Visual Studio 2005 Standard Edition, versione NFR
  • un voucher per un esame di certificazione sulle tecnologie mostrate alla conferenza
  • un coupon per richiedere l'invio di una copia free di Microsoft BizTalk 2006 Developer Edition

 Altri CD e DVD contenenti:

  • Visual Studio Team System
  • BizTalk Server 2006: Laboratori di base
  • SQL Server 2005 Resource DVD: codice di esempio, webcast, Training, Video, Documentazione, Soluzioni e altro materiale dei Partner
  • SQL Server 2005: Tecnologie per la disponibilità dei dati
  • SQL Server 2005 e Visual Studio 2005: Laboratori di base
  • IT's ShowTime
  • SQL Server 2005 e Visual Studio 2005: panoramica di Microsoft SQL Server 2005 e Microsoft Visual Studio 2005
  • Documentazione Microsoft e dei Partner sui 3 prodotti della conferenza

Il tutto con diverso materiale cartaceo degli sponsor e dei partner.

In aggiunta presso uno stand Microsoft ho ricevuto una copia di valutazione (180gg) di Windows Server 2003 R2 Enterprise Edition.

Che altro dire? Buon lavoro a tutti

Share

CheckBox obbligatorio tramite CustomValidator

Se si vuole obbligare la selezione di una checkbox (tipicamente quella per la verifica della privacy) non è possibile utilizzare il controllo RequiredFieldValidator.

La soluzione è comunque semplice utilizzando il flessibile controllo CustomValidator.

Inserite nell'html due controlli:

  • la CheckBox:
    <asp:CheckBox ID="chkPrivacy" Runat="server" />
  • il controllo CustomValidator
    <asp:CustomValidator ClientValidationFunction="RequiredPrivacy" Runat="server" ID="CustomValidatorchkPrivacy" />

Validazione lato server

La validazione si riduce semplicemente alla verifica della proprietà Checked del controllo CheckBox

private void CustomValidatorchkPrivacy_ServerValidate(object source, ServerValidateEventArgs args)

{

    args.IsValid = true;

    if(chkPrivacy.Checked == false)

        args.IsValid = false;

}

Validazione lato client

 La validazione lato client (facoltativa) si effettua impostando la proprietà ClientValidationFunction del controllo CustomValidator

ClientValidationFunction="RequiredPrivacy"

ed inserendo nell'head il codice Javascript per la validazione. Ad esempio:

<script language="javascript">
function RequiredPrivacy(oSrc, args){
  if (document.all["<%=chkPrivacy.ClientID%>"].checked == false) {
        alert("Devi acconsentire al trattamento dei dati personali");
        args.IsValid = false;
  }
 }
</script>

 Si noti lo script server chkPrivacy.ClientID necessario per passare il corretto ID del controllo a runtime al codice Javascript

Share

Convalidare le date in Asp.Net con il controllo CompareValidator

La validazione di una data inserita in un form è fornita direttamente e semplicemente dal controllo di convalida CompareValidator.

Per controllare che il valore inserito in una textbox sia di tipo data bastano i seguenti passi:

  • Creare un controllo di tipo TextBox
    <asp:textbox id="InputDate" runat="server" width="200px"></asp:textbox>
  • Inserire un controllo CompareValidator
  • Impostare il nome del controllo da verificare con il nome della TextBox: InputDate
  • Impostare il messaggio di errore, la visualizzazione (statica, dinamica) e gli altri parametri del controllo
  • Impostare l'operatore a DataTypeCheck
  • Impostare il tipo di dato a Date

A questo punto la convalida è già perfettamente funzionante. Il controllo risultante sarò di questo tipo:

 

<asp:comparevalidator id="CompareValidator1" runat="server" errormessage="La data deve essere nel formato gg/mm/aaaa"  controltovalidate="InputDate" operator="DataTypeCheck" type="Date"></asp:comparevalidator>

Due nota bene:

  • Se si vuole che la convalida venga sempre effettua è obbligatorio inserire anche un controllo di tipo RequiredFieldValidator (come per tutte le convalide che si vuole rendere obbligatorie)
  • Effettuare sempre la convalida anche lato server testando la proprietà Page.IsValid!!
Share

Come determinare altezza e larghezza di una immagine caricata tramite il controllo upload in asp.net

Capita spesso di caricare tramite pagina Asp.Net un'immagine.

Il supporto fornito dal Framework .Net consente di farlo in maniera molto più semplice che in passato accedendo alla proprietà PostedFile del controllo INPUT di tipo file modificato per essere eseguito sul server.

Ad esempio:

<input id="imgUpload" type="file" runat="server">

La necessità spesso è quella di verificare il tipo di file inviato oppure altezza e larghezza in pixel per evitare che venga caricata un'immagine troppo grande.

A seguito dell'evento di upload si può fare:

'Creo un oggetto immagine leggendo lo stream di upload

Dim imgUploaded As System.Drawing.Image

imgUploaded = System.Drawing.Image.FromStream(imgUpload.PostedFile.InputStream)

'Determino altezza e larghezza dell'immagine

Dim imgUploadedWidth As Single = imgUploaded.PhysicalDimension.Width

Dim imgUploadedHeight As Single = imgUploaded.PhysicalDimension.Height

 'A questo punto posso fare tutti i controlli del caso

If imgUploadedWidth > 120 Or imgUploadedHeight > 60 Then

Me.ErrorMessageImg.Text = "Le dimensioni massime dell'immagine possono essere di 120*60. Caricare un'immagine più piccola."

Return

End If

Try

ImageBrowse.PostedFile.SaveAs(Server.MapPath(virtualPath))

Catch ex As Exception

Me.ErrorMessageImg.Text = "Errore: impossibile caricare l'immagine sul sito. " + ex.Message.ToString

Return

End Try

Share

Come inviare email con gli oggetti CDONTS in ASP.NET

Importare il namespace System.Web.Mail

<%@ Import Namespace="System.Web.Mail"%>

Istanziare l'oggetto MailMessage, impostarne i membri ed inviare la mail:

Dim mail As New MailMessage
mail.From = "mittente@test.it"
mail.To = "destinatario@test.it"
mail.Subject = "Email di test"
mail.Body = "Testo del messaggio"
'Invio della mail
SmtpMail.Send(mail)
Share