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

Windows Communication Foundation .NET Discussion :

Service WCF et champ varbinary(max) [Débutant]


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut Service WCF et champ varbinary(max)
    Bonjour tout le monde , je développe une appliaction web silverlight avec service WCF et j'ai une table qui contiebnt un champ varbinary , pour afficher ce champ sur mon Usercontrol pas de soucis le probléme vient quand j'essaye d'enregistrer de mon appliaction vers la base SQL server car j'utilise cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
      [OperationContract]
                public string Commande(string Requete_Select)
                {
                    ConnectionStringSettings objConnectionStringSettings = ConfigurationManager.ConnectionStrings["TidjaraBaseConnectionString"];
                    Chaine_De_Conenxion = objConnectionStringSettings.ConnectionString;
     
                    try
                    {
                        using (SqlConnection connection = new SqlConnection(Chaine_De_Conenxion))
                        {
                            SqlCommand command = new SqlCommand(Requete_Select, connection);
                            command.Connection.Open();
                            command.ExecuteNonQuery();
                        }
                    }
                    catch (SqlException ex)
                    {
                        return ex.Message;
                    }
                    return "";
                }
    et je construit ma requete sous format string et quand j'essaye de mettre la valeur de ce champ j'ai System.Byte[] dans le Set

    que dois je faire svp? merci d'avance de vos réponses

  2. #2
    Membre éclairé Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    ce que j'ai trouvé sur le web et ça fait des jours que je cherche c'est avec RIA services et ou bien une instruction SQl avec BULK sauf que je ne peux pas accéder au path du fichier sinon j'ai une exception de sécurité je vous en conjure aider moi je n'ai rien trouvé la

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lila23 Voir le message
    et je construit ma requete sous format string et quand j'essaye de mettre la valeur de ce champ j'ai System.Byte[] dans le Set
    Peut-on voir comment tu fais ?

  4. #4
    Membre éclairé Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    string Afectations = "";
                    string Condition = "";
                    var Liste_Proprietes_Brutes = _Type_Pere.GetProperties();
                    var Dico = global.Types[Table_Pere];
                    foreach (var p in Liste_Proprietes_Brutes)
                    {
                        if (Dico.ContainsKey(p.Name))
                        {
                            if (Identifiant_Pere.Contains(p.Name))
                            {
                                var v = p.GetValue(_Pere_Courant, null);
                                Condition += "AND (" + p.Name + " = '" + v.ToString() + "')";
                            }
                            else
                            {
                                if (true)
                                {
                                    var v = p.GetValue(_Pere_Courant, null);
                                    var dico = Dico[p.Name];
    // c'est la qu'il va rentrer pour mon champ varbinary
                                    if (Dico[p.Name] == "")
                                    {
     
                                        Afectations += "," + p.Name + " = " + "'" + v +")" ;
                                    }
                                    else
                                    {
                                        string Veleur = v.ToString();
                                        if (Dico[p.Name] == "System.Decimal") Veleur = Veleur.Replace(",", ".");
                                        else if (Dico[p.Name] == "System.String") Veleur = Veleur.Replace("'", "''");
                                        Afectations += "," + p.Name + " = " + "'" + Veleur + "'";
                                    }
                                }
                            }
                        }
                    }
     
                    _Commandes_Sql += "\n";
                    _Commandes_Sql += "UPDATE " + Table_Pere + " SET " + Afectations.Substring(1) + " WHERE " + Condition.Substring(3) + "\n";
                    _Commandes_Sql += "SET @error = @error + @@error\n";
                    _Commandes_Sql += "\n";
    ensuite j'execute ce batch via une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       public void Exec_CMD(string Commande)
                {
                    ServiceWCFClient S = new ServiceWCFClient();
                    S.Endpoint.Binding.OpenTimeout = TimeSpan.FromMinutes(10);
                    S.CommandeCompleted += new EventHandler<CommandeCompletedEventArgs>(S_CommandeCompleted);
                    S.CommandeAsync(_Instruction_Use + Commande);
                }
                void S_CommandeCompleted(object sender, CommandeCompletedEventArgs e)
                {
                    Exec_CMDCompleted(e.Result);
                }
    mais le champ varbinary sa valeur est égale à System.byte[]

    y a t'il une autre facon pour sauvegarder ce genre de type de données via WCF ? merci encore

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lila23 Voir le message
    y a t'il une autre facon pour sauvegarder ce genre de type de données via WCF ? merci encore
    Il y a 2 problèmes :
    • Tu n'utilises pas les requêtes paramétrées
    • Le problème est que tu utilises très mal WCF. ça me rappelle un projet sur lequel j'avais travaillé où tous les paramètres en entrée étaient en string comme tu le fais actuellement. Vu que ton objet est complexe pourquoi ne pas créer un contrat de données qui sera passer en paramètres à ton opération WCF et après côté serveur tu effectues tout le traitement (génération de la requête vu que c'est ce que tu fais) que tu fais actuellement côté client.

  6. #6
    Membre éclairé Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    je viens de faire une méthode qui a pour paramétre object
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    [OperationContract]
                public string SqlCommandPrepareEx(object dossier)
                {
     
                    ConnectionStringSettings objConnectionStringSettings = ConfigurationManager.ConnectionStrings["TidjaraBaseConnectionString"];
                    Chaine_De_Conenxion = objConnectionStringSettings.ConnectionString;
     
                    try
                    {
         // j'ai laissé vide juste pour tester
     
                    }
                    catch (SqlException ex)
                    {
                        return ex.Message;
                    }
                    return "";
     
     
                }
    et la en exécutant j'ai cette exception:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Une erreur s'est produite en tentant de sérialiser le paramètre :dossier. Le message InnerException était « Le type « f4674cdb-5a4b-4cc6-bb1c-cd1fd2ad5d52__proxy » avec le nom de contrat de données « f4674cdb-5a4b-4cc6-bb1c-cd1fd2ad5d52__proxy:http://schemas.datacontract.org/2004/07/ » n‘est pas attendu. Ajoutez tous les types non connus statiquement à la liste des types connus, par exemple en utilisant l'attribut KnownTypeAttribute ou en les ajoutant à la liste des types connus qui est transmise à DataContractSerializer. ». Pour plus d'informations, voir InnerException.
    je crois qu'il ne reconnait pas le type de mon objet?

  7. #7
    Membre éclairé Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    je n'utilises pas les types crées par le DBML par exemple j'ai une table DOSSIER sur sqlserver je n'utlises pas le TYPE DOSSIER crée par le DBML mais quand j'execute le SELECT sur cette table je construit un type qui représente tous les champs de cette table avec leur type j'avais fait çà pour faire des requêtes complexes avec jointure ou somme mais apparement à l'envoi de cet objet au service WCF il ne le reconnait pas

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

Discussions similaires

  1. Recuperer un champ varbinary(MAX)
    Par Msysteme dans le forum C#
    Réponses: 2
    Dernier message: 19/10/2009, 16h23
  2. Appli utilisant Service WCF
    Par cquadjul dans le forum Windows Communication Foundation
    Réponses: 3
    Dernier message: 11/04/2007, 16h40
  3. [reporting services] Somme des champs
    Par Wells dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/08/2006, 11h28
  4. Réponses: 7
    Dernier message: 27/06/2006, 20h43

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