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 :
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)
);
Les données reçues à écrire sont de la forme byte[] dataBlob.


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 :
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;
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
reader.Read();
userBlobDataObject = reader.GetFieldValue<Object>(0);
if (userBlobDataObject != null)
{
	userDataBlob =
	ObjectToByteArray(userBlobDataObject);
}
Et l'écriture utilise ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
					cmd.Parameters.AddWithValue(
						"personalizationblob", dataBlob);
Voilà-t-y pas que les données récupérées à la lecture ne sont pas conformes.

Pas de doute je me suis trompé, mais où ?
Il ne fallait pas convertir ?