Archive pour juillet 2007

Champ varbinary(max) et Datalength

15 juillet 2007

J’ai souvent travaillé avec des champs binaires pour stocker des images ou des documents associés à mes enregistrements.
Pour des raisons pratiques, je place le champ dans la même table que celle de l’objet qui l’utilise.

Pour des raisons évidentes de performance, je ne remonte jamais le binaire à chaque fois que j’ai besoin d’un enregistrement. J’ai des procédures séparées pour les opérations sur le binaire.
Seulement, j’ai besoin de savoir s’il y a ou non un binaire associé (vu que le champ est défini comme NULL) quand je remonte l’enregistrement.

Je ne peux pas tester la nullité du champ coté code car cela m’obligerai à remonter le champ binaire dans les cas où il ne serait pas vide.
J’utilise donc la technique suivante :

Select ISNULL(Datalength(MonChampImage),0) From dbo.MaTable

0 : il n’y a pas d’image
> 0 : il y a une image

La fonction DATALENGTH ne scanne pas l’ensemble du champ binaire pour obtenir sa taille. En revanche, une opération d’IO supplémentaire est tout de même faite pour pointer sur la racine de sa zone de stockage et obtenir la taille (explications sur ce blog : http://blogs.msdn.com/sqltips/archive/2006/07/14/666188.aspx)

Cette opération de lecture n’a jamais plombé les performances de mes sites mais pour l’éviter, on peut utiliser l’écriture suivante :

Select
  Case When MonChampImage Is Null
  Then 0 Else 1
  End
From dbo.MaTable

Ici, on teste directement la nullité du pointeur vers le binaire. Par contre, la syntaxe est un peu plus…large.

Biensur, je vous passe la solution de stocker un champ bit donnant directement l’information, mais j’aime me compliquer la vie ;-) .

Quelques unes des règles à respecter toutefois :

  • stocker le type du binaire dans un champ associé, moi je stocke le MIME type
  • utiliser l’instruction TEXTIMAGE_ON à la création de la table pour stocker les binaires dans un FILEGROUP séparé

Reporting Services – Logon failure

13 juillet 2007

Depuis quelques jours Reporting Services (SSRS pour les intimes) ne marche plus sur mon laptop. J’ai une erreur d’authentification à l’exécution des rapports :

Logon failure: unknown user name or bad password

Après avoir fait le tour des configurations et des logs, je ne comprenais toujours pas pourquoi j’avais cette erreur. Surtout que la preview du rapport se faisait correctement sous Visual Studio.

Donc j’ai cherché un peu et j’ai compris que la raison était mon récent changement de mot de passe (*$#@\ policy d’entreprise ;-) )

Je suis donc allé faire un tour dans l’outil de configuration pour retaper mon mot de passe

Reporting Services Configuration -> Execution Account

Ce que j’en retiens :

  • Mettre un compte spécial pour ce genre de configuration
  • Bien lire le message d’erreur jusqu’au bout (…or bad password)