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

VB.NET Discussion :

Ma fonction PL/SQL retourne Nothing sur VB


Sujet :

VB.NET

  1. #1
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut Ma fonction PL/SQL retourne Nothing sur VB


    J'ai une fonction en pl/sql qui est censée me retourner une chaîne de caractères or, elle me retourne Nothing systématiquement ! J'ai ajouté ma fonction dans mon DataSet en précisant que ça doit me retourner une valeur unique mais ça n'a pas l'air de trop fonctionner

    pl/sql
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
       FUNCTION proc_ajout_agriculteur (p_nom_exploitation       IN VARCHAR2,
                                        p_addr_exploitation      IN VARCHAR2,
                                        p_cp_exploitation        IN VARCHAR2,
                                        p_commune_exploitation   IN VARCHAR2,
                                        p_nom_exploitant         IN VARCHAR2,
                                        p_addr_exploitant        IN VARCHAR2,
                                        p_cp_exploitant          IN VARCHAR2,
                                        p_commune_exploitant     IN VARCHAR2,
                                        p_tel_fixe               IN VARCHAR2,
                                        p_tel_port               IN VARCHAR2,
                                        p_fax                    IN VARCHAR2,
                                        p_mail                   IN VARCHAR2,
                                        p_sau                    IN NUMBER,
                                        p_herbe                  IN NUMBER,
                                        p_labourable             IN NUMBER,
                                        p_fumiers                IN NUMBER,
                                        p_dte_creation           IN DATE,
                                        p_dte_sortie             IN DATE,
                                        p_accord                 IN DATE,
                                        p_comm                   IN VARCHAR2,
                                        p_siret                  IN VARCHAR2)
          RETURN VARCHAR2
       AS
          v_num   agriculteurs.num%TYPE;
          v_sqc   NUMBER;
       --      v_step   packepur.steps.lib%TYPE;
       BEGIN
          SELECT sqc_agriculteurs.NEXTVAL INTO v_sqc FROM DUAL;
     
          -- Adapter la numérotation en fonction de la numérotation finale !!
          v_num := 'SDEA_' || TO_CHAR (v_sqc);
     
          INSERT INTO agriculteurs (num,
                                    step,
                                    nom_exploitation,
                                    addr_exploitation,
                                    cp_exploitation,
                                    commune_exploitation,
                                    nom_exploitant,
                                    addr_exploitant,
                                    cp_exploitant,
                                    commune_exploitant,
                                    tel_fixe,
                                    tel_port,
                                    fax,
                                    mail,
                                    sau,
                                    herbe,
                                    labourable,
                                    fumiers,
                                    dte_creation,
                                    dte_sortie,
                                    accord,
                                    comm,
                                    siret)
               VALUES (v_num,
                       NULL, -- A changer lorsque les périmètres seront disponibles (trouver la step d'après la commune de l'exploitation) !!
                       p_nom_exploitation,
                       p_addr_exploitation,
                       p_cp_exploitation,
                       p_commune_exploitation,
                       p_nom_exploitant,
                       p_addr_exploitant,
                       p_cp_exploitant,
                       p_commune_exploitant,
                       p_tel_fixe,
                       p_tel_port,
                       p_fax,
                       p_mail,
                       p_sau,
                       p_herbe,
                       p_labourable,
                       p_fumiers,
                       p_dte_creation,
                       p_dte_sortie,
                       p_accord,
                       p_comm,
                       p_siret);
     
          RETURN v_num;
       END;
    VB.Net
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
        Private Sub InsererAgriculteur()
            Dim hfAjoutAgriculteur As String = Request.Form("hfAjoutAgriculteur")
     
            If hfAjoutAgriculteur = "true" Then
                Dim _query As New dsAgriculteursTableAdapters.QueriesTableAdapter
                Dim num As String = String.Empty
     
                With fvExploitationAgricole
                    Dim SAU As Nullable(Of Decimal)
                    Dim Herbe As Nullable(Of Decimal)
                    Dim Labourable As Nullable(Of Decimal)
                    Dim Fumiers As Nullable(Of Decimal)
                    Dim DateCreation As Date
                    Dim DateSortie As Nullable(Of Date)
                    Dim Accord As Nullable(Of Date)
                    Dim txt As TextBox
     
                    txt = CType(.FindControl("txtSAUAjout"), TextBox)
                    If txt.Text <> String.Empty Then
                        SAU = Convert.ToInt32(txt.Text)
                    End If
                    txt = CType(.FindControl("txtHerbeAjout"), TextBox)
                    If txt.Text <> String.Empty Then
                        Herbe = Convert.ToInt32(txt.Text)
                    End If
                    txt = CType(.FindControl("txtLabourableAjout"), TextBox)
                    If txt.Text <> String.Empty Then
                        Labourable = Convert.ToInt32(txt.Text)
                    End If
                    txt = CType(.FindControl("txtFumiersAjout"), TextBox)
                    If txt.Text <> String.Empty Then
                        Fumiers = Convert.ToInt32(txt.Text)
                    End If
                    txt = CType(.FindControl("txtDateCreationAjout"), TextBox)
                    If txt.Text <> String.Empty Then
                        DateCreation = Convert.ToDateTime(txt.Text)
                    End If
                    txt = CType(.FindControl("txtDateSortieAjout"), TextBox)
                    If txt.Text <> String.Empty Then
                        DateSortie = Convert.ToDateTime(txt.Text)
                    End If
                    txt = CType(.FindControl("txtAccordAjout"), TextBox)
                    If txt.Text <> String.Empty Then
                        Accord = Convert.ToDateTime(txt.Text)
                    End If
     
                    num = _query.FuncAjoutAgriculteur(
                        CType(.FindControl("txtNomExploitationAjout"), TextBox).Text,
                        CType(.FindControl("txtAddrExploitationAjout"), TextBox).Text,
                        CType(.FindControl("txtCPExploitationAjout"), TextBox).Text,
                        CType(.FindControl("ddlCommunesExploitation"), DropDownList).SelectedValue,
                        CType(.FindControl("txtNomExploitantAjout"), TextBox).Text,
                        CType(.FindControl("txtAddrExploitantAjout"), TextBox).Text,
                        CType(.FindControl("txtCPExploitantAjout"), TextBox).Text,
                        CType(.FindControl("ddlCommunesExploitant"), DropDownList).SelectedValue,
                        CType(.FindControl("txtTelFixeAjout"), TextBox).Text,
                        CType(.FindControl("txtTelPortAjout"), TextBox).Text,
                        CType(.FindControl("txtFAXAjout"), TextBox).Text,
                        CType(.FindControl("txtMailAjout"), TextBox).Text,
                        SAU,
                        Herbe,
                        Labourable,
                        Fumiers,
                        DateCreation,
                        DateSortie,
                        Accord,
                        CType(.FindControl("txtCommAjout"), TextBox).Text,
                        CType(.FindControl("txtSIRETAjout"), TextBox).Text)
     
                    .ChangeMode(FormViewMode.ReadOnly)
                End With
     
                '* Rechargement de la liste des agriculteurs et sélection du nouvel agriculteur ajouté
                ddlAgriculteurs.DataBind()
                ddlAgriculteurs.Items.FindByValue(num).Selected = True
            End If
        End Sub
    Si jamais quelqu'un vois le problème car en générale j'utilise plutôt des curseurs pour me renvoyer des valeurs.



  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    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 177
    Points : 25 125
    Points
    25 125
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    J'ai ajouté ma fonction dans mon DataSet en précisant que ça doit me retourner une valeur unique
    un dataset pour appeler une fonction ?
    vous pouvez démonter une voiture entièrement pour changer un pneu, mais démonter le pneu suffit
    mycommand.executescalar est plus conseillé

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    un dataset pour appeler une fonction ?
    Et pourquoi pas ! J'ai un TableAdapter qui ne contient que des procédures et fonctions pl/sql ce qui m'évite de me taper à la main les connections pour chaque utilisation. Et d'ailleurs le code généré ne fait qu'appeler justement un ExecuteScalar donc je ne vois pas où ça peut faire la différence de le faire à la main

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    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 177
    Points : 25 125
    Points
    25 125
    Par défaut
    je n'ai jamais utilisé de dataset, et pourtant je tape une seule ligne de code pour mettre une valeur d'une fonction sql dans une variable ou appeler une procédure stockée ou remplir l'équivalent d'un datatable ou list(of classe)

    la majorité des développeur se font une encapsulation d'accès aux données avant de coder


    et même si en effet ca devrait marcher c'est dommage de perdre autant de performances (même si c'est peu perceptible, sur des grosses applis ca l'est)

Discussions similaires

  1. condition sur la requete sql : is nothing
    Par ciara dans le forum VB.NET
    Réponses: 2
    Dernier message: 22/09/2009, 15h08
  2. Utilisation fonction MIN (SQL) sur les dates
    Par fafabzh6 dans le forum SAS Base
    Réponses: 5
    Dernier message: 19/09/2008, 15h36
  3. requete sur une fonction pl/sql?
    Par widom dans le forum PL/SQL
    Réponses: 1
    Dernier message: 28/12/2007, 10h51
  4. Fonction SQL retourne @ ip
    Par bm_oracliste dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/11/2007, 15h51
  5. Erreur sur Fonction PL/SQL
    Par boudou dans le forum PL/SQL
    Réponses: 2
    Dernier message: 22/10/2007, 08h34

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