Bonjour tout le monde,
Je suis en train de travailler sur les webParts, et je coince sur l'écriture dans la base de données, moyennant quoi mon sujet est à la jonction de ASP.Net, C#, et SQL Server.
Alors j'ai choisi ASP.Net en me disant que là les gens sont plus sensibilisés aux données utilisées par la personnalisation webParts.
Pour l'écriture de mon PersonalizationProvider, j'ai adapté d'un Provider pour MySql (ça me change, il y a dix ans j'ai fait l'inverse pour l'authentification).
Moyennant quoi, j'ai créé une table comme suit :
Les données reçues à écrire sont de la forme byte[] dataBlob.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TABLE personalization ( username varchar(255) default NULL, path varchar(255) default NULL, applicationname varchar(255) default NULL, personalizationblob BINARY(255) );
Comme la lecture dans la table donne un objet, pour réécrire je fais la conversion comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 byte[] ObjectToByteArray(object obj) { if (obj == null) return null; BinaryFormatter bf = new BinaryFormatter(); using (MemoryStream ms = new MemoryStream()) { bf.Serialize(ms, obj); return ms.ToArray(); } }
La lecture se fait par une fonction qui démarre comme suit :
La lecture du champ personalizationblob est suivie de ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 protected override void LoadPersonalizationBlobs(WebPartManager webPartManager, string path, string userName, ref byte[] sharedDataBlob, ref byte[] userDataBlob) { { // Load shared state sharedDataBlob = null; userDataBlob = null; object sharedBlobDataObject = null; object userBlobDataObject = null;
Et l'écriture utilise ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 reader.Read(); userBlobDataObject = reader.GetFieldValue<Object>(0); if (userBlobDataObject != null) { userDataBlob = ObjectToByteArray(userBlobDataObject); }
Voilà-t-y pas que les données récupérées à la lecture ne sont pas conformes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cmd.Parameters.AddWithValue( "personalizationblob", dataBlob);
Pas de doute je me suis trompé, mais où ?
Il ne fallait pas convertir ?
Partager