IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

BLOB sur SQL Server


Sujet :

ASP.NET

  1. #1
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 123
    Points : 2 235
    Points
    2 235
    Par défaut BLOB sur SQL Server
    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 ?

  2. #2
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 123
    Points : 2 235
    Points
    2 235
    Par défaut
    Bon, on dirait que ça me réussit de venir poser la question, car je trouve la réponse juste après.

    Pour finir, au moment de la lecture plutôt que convertir je me contente d'un cast :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    reader.Read();
    userBlobDataObject = reader.GetFieldValue<byte[]>(0);
    if (userBlobDataObject != null)
    {
    	userDataBlob =
    	((byte[])userBlobDataObject);
    }
    Le contrôle se réduit, se restaure ...
    Bon, je vais aborder le point suivant.
    Merci.

    Ah au fait 255 octets pour les données de personnalisation ce n'est pas assez. Je vais essayer 1024.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  2. [debutant]Auto incrementation sur sql-server 2000
    Par syl2095 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 18/11/2004, 18h00
  3. SqlCommand sur SQL Server 7.0
    Par sangokus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/03/2004, 10h22
  4. Replication d'une base AS/400 sur SQL Server
    Par david_chardonnet dans le forum Autres SGBD
    Réponses: 9
    Dernier message: 21/11/2003, 11h17
  5. problème de float sur SQL server 2000.
    Par fidji dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 24/07/2003, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo