Précédent   Forum des professionnels en informatique > Dotnet > Accès aux données > Linq
Linq Forum d'entraide sur la manipulation de données avec Linq
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/10/2011, 16h21   #1
Membre éclairé
 
Homme
Développeur Sharepoint/Biztalk
Inscription : octobre 2008
Messages : 502
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur Sharepoint/Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 502
Points : 399
Points : 399
Par défaut Erreur execution requete LINQ

Bonjour,

J'utilise une classe C# dans un projet Biztalk. Ecartons Biztalk pour le problème, c'est indépendant.

J'ai une classe qui prend en paramètre un fichier XML (envoyé par Biztalk). Ce fichier XML comporte une structure A (4 tables SAP dedans).
Mes requêtes LINQ permettent d'obtenir en sortie une structure B (afin de requêter sur toutes les tables).

Pour cela, lorsque je récupére le fichier XML, je stocke tout dans un dataset, puis je requête sur ce dataset.

Voici le bout de code qui pose problème :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var requete = from A in table1.AsEnumerable()
                              join B in table2.AsEnumerable()
                                 on A["TPLNR"] equals B["TPLNR"] // Clé primaire pour la jointure
                              select new
                              {
                                  Nom_classe = A.Field<string>("CLASSNUM") != null ? A.Field<string>("CLASSNUM") : "test", // Noms des colonnes dans les tables qu'on récupére
                                  Evenement = A.Field<string>("EVENT") != null ? A.Field<string>("EVENT") : "test",
                                  //Date_effet = A.Field<string>("DATUM_CRE").ToString() != null ? A.Field<string>("DATUM_CRE").ToString() : "test", // Mettre la date en string
                                  //Code_point_mesurage = A.Field<string>("MSGRP") != null ? A.Field<string>("MSGRP") : "test",
                                  //Nom_point_mesurage = "/",
                                  //Code_Secteur = A.Field<string>("BEBER") != null ? A.Field<string>("BEBER") : "test",
                                  //Nom_secteur = A.Field<string>("BEBER_DESC") != null ? A.Field<string>("BEBER_DESC") : "test",
                                  //Code_region = A.Field<string>("REGION") != null ? A.Field<string>("REGION") : "test",
                                 // Nom_region = A.Field<string>("REGION_DESC") != null ? A.Field<string>("REGION_DESC") : "test",
 
                                 // Charact = B.Field<string>("CHARACT") != null ? B.Field<string>("CHARACT") : "test",
                                 // Value_from_num = B.Field<string>("VALUE_FROM") != null ? B.Field<string>("VALUE_FROM") : "test",
                                  //Value_from_curr = "/", // Création paramètre à vide : homogénéité pour récupérer une structure XML
                                  //Value_char = "/"
                              };
Les tables A et B sont bien déclarés, la requête fonctionne, .. j'ai tout testé avec un jeu de test (envoi brut du fichier XML en paramètre).

Maintenant quand je passe en test réel avec un fichier généré par Biztalk, une exception se lève au niveau de la requête. Ca me met :
Citation:
xlang/s engine event log entry: Uncaught exception (see the 'inner exception' below) has suspended an instance of service 'Gal_Debatch.Orchestration2(b4d1c8a5-3556-d4ac-1f7d-2f4b06aec59f)'.
The service instance will remain suspended until administratively resumed or terminated.
If resumed the instance will continue from its last persisted state and may re-throw the same unexpected exception.
InstanceId: f82fc4f2-a3e8-4655-84df-3fae53b92d24
Shape name: Mise_a_plat_tables
ShapeId: 07477495-006b-4800-a131-9307cc80456b
Exception thrown from: segment 1, progress 17
Inner exception: Value cannot be null.
Parameter name: source

Exception type: ArgumentNullException
Source: System.Data.DataSetExtensions
Target Site: System.Data.EnumerableRowCollection`1[System.Data.DataRow] AsEnumerable(System.Data.DataTable)
The following is a stack trace that identifies the location where the exception occured

at System.Data.DataTableExtensions.AsEnumerable(DataTable source)
at SAP_BZT_Utiles.Class1.exampleFunction(XmlDocument msg)
at Gal_Debatch.Orchestration2.segment1(StopConditions stopOn)
at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)l
Cependant, je vérifie toujours de récupérer une valeur non null, je vois pas d'où pourrait venir le soucis.

Shape name est le nom de l'endroit où se lance le code c# dans Biztalk
exampleFunction(XmlDocument msg) est le nom de la fonction

Je suis aussi débutant en LINQ ...

Merci !
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 16h55   #2
Rédacteur/Modérateur
 
Avatar de Deepin
 
Homme Deepin
Ingénieur - Chef de projet Modélisation/Simulation
Inscription : avril 2004
Messages : 1 341
Détails du profil
Informations personnelles :
Nom : Homme Deepin
Localisation : Ile Maurice

Informations professionnelles :
Activité : Ingénieur - Chef de projet Modélisation/Simulation
Secteur : Industrie

Informations forums :
Inscription : avril 2004
Messages : 1 341
Points : 7 052
Points : 7 052
Envoyer un message via Skype™ à Deepin
Salut,

Si vous avez trouvé la solution, merci de la poster. Elle pourrait etre utile aux autres.
Deepin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 15h47   #3
Membre éclairé
 
Homme
Développeur Sharepoint/Biztalk
Inscription : octobre 2008
Messages : 502
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur Sharepoint/Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 502
Points : 399
Points : 399
C'est une erreur tellement bête que j'ai pas réussi à supprimer mon poste pour ma honte

Tout simplement qu'une des tables était vide, du coup ajouter rien à quelque chose, ça mène à rien

Pour résoudre le soucis, il faut rajouter des conditions sur le résultat des requêtes pour s'assurer qu'on récupère bien une valeur non nulle
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h14.


 
 
 
 
Partenaires

Hébergement Web