CommunityServer 1.1: Bug (e fix!) sull'archivio mensile dei post

di Matteo Casati, in .NET,

Usando Community Server (versione 1.1, build 50615) abbiamo (io e Alessandro) rilevato un problema legato alla localizzazione del server (in italiano).

In pratica l'accesso all'archivio mensile dei post di un Blog generava un'eccezione (System.Data.SqlClient.SqlException) nella conversione da char a datetime impedendo la visualizzazione della pagina.

Nel file SqlGenerator.cs (rif. progetto: SqlDataProvider), il metodo

BuildBlogThreadQuery (BlogThreadQuery query, string databaseOwner)

della classe CommunityServer.Data.SqlGenerator presentava la seguente implementazione:

else if(query.BlogThreadType == BlogThreadType.Month)
{
sb.AppendFormat(" and (B.BloggerTime >= '{0}' and B.BloggerTime < '{1}') ", safeDate, safeDate.AddMonths(1));
}

Dove "safeDate" - di tipo DateTime - veniva concatenato implicitamente ad una stringa (richiamando in modo invisibile il metodo ToString(), come documentato da Stefano Mostarda) e producendo un risultato non compatibile con T-SQL (oltre alla solita inversione di giorno e mese, il problema era nell'uso del "." come separatore nell'orario).

Il fix è stato una semplice formalizzazione della conversione da data a stringa, optando per il formato "yyyMMdd" (nell'estrazione dei post di un mese non si è ritenuto necessario specificare l'orario) che ha portato il precedente codice (localizzato alla riga 281 nella build indicata) a diventare:

else if(query.BlogThreadType == BlogThreadType.Month) 
{ 
sb.AppendFormat(" and (B.BloggerTime >= '{0}' and B.BloggerTime < '{1}') ", safeDate<strong>.ToString("yyyyMMdd")</strong>, safeDate.AddMonths(1)<strong>.ToString("yyyyMMdd")</strong>); 
}

Rebuild e... il gioco è fatto, come potete vedere in quest'altro blog (che usa la versione incriminata di CS).

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese