Saturday, 18 August 2012

Devenva becomes a delivery centre on Microsoft technologies.

 

Recupérer la valeur d'une propriété privée - Get the value of private property outside the containing assembly via reflection( French version )

Récupérer la valeur d'une propriété privée d'une classe à partir d'une autre classe est, par théorie, impossible. En effet, par définition, une propriété déclarée private n'est accessible qu'à l'intérieur de la classe.
Considérons l'exemple :

 public class Person
    {
        public Personne(string name, string surname)
        {
            Name = name;
            Surname = surname;
        }
        public string  Name { get; set; }
        private string Surname { get; set; }
    }
Depuis une autre classe, il est impossible d'évoquer :

Person holder = new Person("Foo","Bar");
var holderName = holder.Name ; //right
var holderSurname = holder.Surname ; // error

Toutefois dans certains cas exceptionnels, nous voulons récupérer cette valeur. Etant donné que le source de l'assembly n'est pas disponible, voici une façon de récupérer la valeur :

 var holderSurname = p.GetType().GetProperty("Surname", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(p, null);

Conclusion : à partir de la réflexion, nous avons pu avoir la valeur d'une propriété privée d'une classe.



Saturday, 28 January 2012

SQL Server : Unicode / Non Unicode Data types

I write this topic to give you a quick tips when you're facing to some errors messages like 'cannot convert unicode to non unicode ....'
In SQL Server, unicode character is encoded in 2 bytes rather than 1 byte for a non unicode character.
In SQL Server, unicoded datas type are prefixed by 'n' : nvarchar, nchar, ntext (deprecated because will be remove in later version of sql server).
They are the same as varchar, nchar,text except that :
- they can handle up to 4000 characters  instead of 8000 characters for varchar,char,text.
- take more memory space
- can support a wider range of characters.

Sometimes in SSIS, the source is captured as a DT_STR ( non unicode ). A classic problem is that the table column is set to nvarchar ( unicode ) data type. A problem occurs when executing the task.
To resolve that issue, 2 solutions :
1- change the table column data type to varchar ( non unicode ) - it's working but I think that it's a dummy and dirty solution.
2- create a temporary output column of type DT_WSTR ( unicoded ), code some inputprocessrow business logic  and map the table column of type nvarchar to that temporary column.

Saturday, 7 January 2012

Mango unlock - Please check that the Zune software is running and that Zune's sync partnership with your phone has been established - Resolved

Hi all windows phone users :
Today, I have to re-unlock my windows phone 7 with the new firmware Mango 7.5. I've noticed that the phone became locked after the Mango update.

During the unlocking process, I've this error message : 
Please check that the Zune software is running and that Zune's sync partnership with your phone has been established 

The guys from yallapps told me that I must uninstall and reinstall the Zune software. Once done, the same issue occurs and finally I decide to handle the problem myself.

First of all, it's impossible that this is due to Zune because i've the last version.

After seeing the behavior of message display in the unlock popup, the error fires after the message " connect to the phone ..." is displayed.
But Zune can connect to my phone, as proof, a sync was successfully done just after connecting the phone to my pc.

So, it seems that there's something blocking at the connection when the phone is sending data to outside.
At this time, I verify that any internet connection cant be made from the phone by using the usb .


Solution
I  switched the connection provider to use the mobile network 3G+ instead of using the usb connection and after redoing the registration process, the problem was solved.  My phone is now dev unlocked


Saturday, 31 December 2011

Bye Bye 2011 - Welcome 2012

Happy New Year 2012 to All - health - happiness - prosperity -  peace and unity to you and your familly

Sunday, 25 December 2011

Comprendre la notion d'application role sous Sql Server en 05 minutes

Une application rôle est au même titre que les database role une notion de la base de données qui va permettre de faciliter la gestion des permissions au niveau des objets depuis un point de vue applicatif.
Les exemples qui suivent sont utilisés dans le contexte d'AdventureWorks
Pour créer une application role :
create application role MonRole with password='MonMotdePasse' , DEFAULT_SCHEMA = Production
Pour vous donner un peu plus d'approche sur la notion, executez la commande suivante :
select * from sys.database_principals
L'interêt d'utiliser une application rôle
- Supposons que dans une société, le département HR accède la base via une application Web1, le département TRAVEL l'accède via un client WPF et le département SERVICE l'accède à partir d'une application WEB2. Chaque membre de ses départements est supposé n'avoir droit qu'aux objects qui les concernent dans la base, et qu'il ne doit pas avoir accès directement à la base ( dans ce sens, pensez sur le fait que sur un client WPF qui s'execute sur le poste de l'utilisateur, l'authentification peut etre les 'credentials' de l'utilisateur lui même ).
Dans ces conditions, il s'avère que le choix de la stratégie d'une application rôle est le moindre effort et la moins couteuse pour le département informatique.

Comment le mettre en oeuvre ? 
Dans ce sens, il faut créer une application role pour chaque département (cf plus haut).

create application role HR_Departement_Role with password='MonMotdePasse' , DEFAULT_SCHEMA = Production
 Il faut noter qu'une application rôle ne contiendra pas d'utilisateurs.

Dans le code application de l'application web destinée aux membres du HR par exemple 

- le code est laissé tres rudimentaire pour se concentrer au contexte principal de l'article


Si je l'execute, alors j'aurai l'erreur

L'erreur montre qu'un select n'est pas permis pour celui sous lequel s'execute le contexte courant.
Celui est  normal car une fois que nous ayions fait appel à l'activation de l'application role dans notre code (sp_setapprole), il faut que celui ci dispose de suffisamment de privilèges pour faire la requête select * from Product

Pour corriger 
grant select on schema::Production to HR_Departement_Role
 Cette commande attribue le droit de faire un select sur le schéma Production (sous lequel appartient la table Product) pour l'application role HR
Après relance, la requête retourne bien la liste voulue.

Ainsi nous avons vu qu'il nous a fallu :
- crèer les application roles et leur droit au niveau de la base
- ajouter 02 lignes de codes pour le changement de contexte d’exécution au niveau du code, et ce totalement indépendant de l'implémentation existante.

Intéressant non !

Saturday, 24 December 2011

Xmas Day

I wish you all and your family a Merry Christmas
Je vous souhaite un joyeux noel