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

C# Discussion :

Erreur requête sql avec fontion Mid et Instr dans code C#


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut Erreur requête sql avec fontion Mid et Instr dans code C#
    Bonjour,

    j'utilise une requête sql dans mon code C# pour récupérer une une partie d'une chaine de caractère dans une autre chaine de caractère, tous simplement faire de la "déconcaténation".

    Pour exemple :

    Chaine de caractère complète : "Classes 5/FR/Ensemble 8/Pré tissus 6/AB1"

    Chaine récupéré : "Classes 5"

    Requête Sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ChaineActe, Mid(ChaineActe,1,  InStr(ChaineActe,'/')-1), Count(ChaineActe) FROM Necessiter GROUP BY ChaineActe
    "ChaineActe" étant la colonne avec les chaines de caractère et "Nécessiter" étant la table.

    Quand je rentre cette requête Sql directement dans access pas de problème, elle me sort exactement se que j'attendais.

    Mais quand je passe cette requête dans mon code C# et que j'effectue le même traitement j'ai l'erreur suivante :

    Le fournisseur n'a pas pu déterminer la valeur String. Par exemple, la ligne venait d'être créée, la valeur par défaut pour la colonne String n'était pas disponible et le consommateur n'avait pas encore défini une nouvelle valeur String...
    Je ne trouve pas la solution et ne voit pas d'où vient le problème.

    Pour exécuter ma requête dans mon code C# j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DataSet DtSet = new DataSet();
                    OleDbDataAdapter AdapTContact = new OleDbDataAdapter(Requete, Connection);
                    AdapTContact.Fill(DtSet, ((char)0).ToString());
                    return DtSet.Tables[0];
    L'erreur intervient à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AdapTContact.Fill(DtSet, ((char)0).ToString());
    Si vous avez rencontrer le même problème ou si vous avez la solution tout simplement je suis preneur.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    je sais pas où est le problème, mais je ne vois pas vraiment l'intérêt de faire ce traitement en SQL... tu pourrais le faire en C#, ce serait plus simple et plus facile à déboguer

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 132
    Points : 12 229
    Points
    12 229
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mid(ChaineActe,1, InStr(ChaineActe,'/')-1)
    Ca ressemble plus à du VBA (Access) qu'à du SQL.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 171
    Points : 25 111
    Points
    25 111
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mid(ChaineActe,1, InStr(ChaineActe,'/')-1)
    Ca ressemble plus à du VBA (Access) qu'à du SQL.
    personne n'a dit que le sql d'access était du vrai sql ^^



    @tomlev : le faire coté sgbd peut gagner un peu temps de transfert réseau
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 110
    Points : 55
    Points
    55
    Par défaut
    l'intérêt de cette requête est que se porte en 2 points :

    1 - Tous d'abord une fois que je récupère le résultat de cette requête dans le code C# je fais une distinction entre les données qui se trouve dans chaque "tuples" de la colonne "Mid(ChaineActe,1, InStr(ChaineActe,'/')-1)" et ceux qui ne si trouve pas avec une autre table qui me sert de comparateur qui a été récupérer au préalable.

    2 - Ensuite, j'ai besoin de récupérer "Count(ChaineActe)" par rapport au "Mid(ChaineActe,1, InStr(ChaineActe,'/')-1)" et que en une simple requête cela est fait, ça évite de faire des traitements supplémentaire pour pas grand chose.


    Enfin j'ai continué à faire certains test et j'ai trouvé d'où vient le problème. Certains résultat sont retournés comme "#Erreur" car il n'y a pas de caractère "/" à rechercher dans la "chaineActe".

    Donc je voudrais savoir s'il est possible de remplacer le "#Erreur" par une valeur par défaut que l'on détermine dans la requête Sql.

    Si vous avez une solution je suis prenneur

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 32
    Points : 33
    Points
    33
    Par défaut
    Salut tu peux utiliser des Tests conditionnelles IFF pour analyser le résultat obtenu par ta fonction et intercepter ainsi l'erreur générer par #Erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IIf(IsNull(Mid(ChaineActe,1,  InStr(ChaineActe,'/')-1)), "Valeur si Null ou #Erreur", Mid(ChaineActe,1,  InStr(ChaineActe,'/')-1))

Discussions similaires

  1. [MySQL] Erreur requête SQL avec simple variable.
    Par Mck698 dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 31/05/2012, 14h33
  2. Réponses: 3
    Dernier message: 23/01/2012, 14h13
  3. [AC-2003] Requête sql avec méthode DoCmd.Runsql bloqué dans une transaction
    Par rana dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/03/2010, 13h20
  4. Requète SQL avec nom de table contenu dans une variable
    Par samoussa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/05/2009, 13h58
  5. erreur de requête SQL avec ASP mais pas dans Access
    Par csszzen dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/03/2007, 09h07

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