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 :

C#, SQL Server, Fonctions stockées, NULL


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Par défaut C#, SQL Server, Fonctions stockées, NULL
    Bonjour à toutes et à tous,

    Je réalise certaine requetes SQL dans des fonctions stockées sur SQL Server 2005. Une de mes fonctions a trois paramètres d'entrée dont une qui peut prendre la valeur NULL.

    Mon problème est que je n'arrive pas à passer un NULL comme paramètre à ma fonction stockée.

    Voici mes déclarations dans la fonction stockée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE FUNCTION dbo.ConfirmMotDePasse
    (
        @N_User varchar(100),
        @Equipe varchar(1) = NULL,
        @Pass varchar(20)
    )
    RETURNS @MaTable TABLE(Nb int, ID int)
    AS
    ...
    et voici mon appel dans Visual Studio :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public DS_SP1.ConfirmMotDePasseDataTable SQL_ConfirmMotDePasse(string N_User, string Equipe, String Pass)
            {
                DS_SP1TableAdapters.ConfirmMotDePasseTableAdapter Table = new LProduction.DS_SP1TableAdapters.ConfirmMotDePasseTableAdapter();
                DS_SP1.ConfirmMotDePasseDataTable oTable = Table.GetData(N_User, Equipe, Pass);
     
                return oTable;
    }
    C'est la variable "Equipe" qui peut être nulle dans certain cas !
    Lorsque ça arrive, Visual Studio me dit :
    La valeur ne peut pas être null.
    A part transformer mon paramètre en "", y a t'il une solution ?

    D'avance merci,
    Cordialement,
    Alex01

  2. #2
    Membre confirmé Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Par défaut
    Hmmm je ne sais pas si cela résoudra l'affaire mais il existe une variable nommé DBNull ou DB.Null qui doit avoir un sens pour SQL Server. Regarde dans ce sens.


    ++

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Par défaut
    Merci pour la piste mais j'ai déja essayé !

    system.DBnull.value transforme un NULL en "" ce qui n'est pas ce que je souhaite.

    Mais encore merci.
    Cordialement
    Alex01

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    tous tes paramètres sont nullables
    = NULL signifie que ca vaut null par défaut et que le paramètre peut etre omis (omis si les autres sont nommés je pense)

    sinon c'est null ou not null mais sans le = devant


    à part ca je comprends pas trop ce que tu fais pour appeler ta fonction, mais je te conseille d'utiliser des sqlparameters, et de mettre dbnull.value dedans
    ils acceptent eux ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system.DBnull.value transforme un NULL en "" ce qui n'est pas ce que je souhaite.
    Non chez moi DBnull.value, c'est bien NULL

    Attention !! tu affiche un NULL dans un DGV il apparaitra comme un "", d'ou peut-etre la mauvaise interprétation

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 66
    Par défaut
    Bonjour à toutes et à tous,

    Merci pour votre aide.
    Pour information, je viens de trouver la solution !

    Explication :
    Comme vous l'aurez vu dans mon code, je passe pas les DataSet pour transmettre mes paramètres aux fonctions stockées et récupérer les résultats (ce qui me permet d'utiliser naturellement des DataTables fortement typées).

    Dans le concepteur graphique de Visual Studio, après avoir configurer le DataSet depuis les sources de données, donc après avoir créé les DataTables, il faut cliquer sur "propriétés" de la DataTable concernée, cliquer sur l'option "Parameters (collection)" et dans "l'éditeur de collections parameters" mettre le membre / paramètre concerné avec l'option : AllowDbNull = true (Par défaut il sont tous à false).

    Voir capture d'écran jointe.

    Lorsque cette option est à True, je peux écrire dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public DS_SP1.ConfirmMotDePasseDataTable SQL_ConfirmMotDePasse(string N_User, string Equipe, String Pass)
            {
    Equipe = null;            
     
    DS_SP1TableAdapters.ConfirmMotDePasseTableAdapter Table = new LProduction.DS_SP1TableAdapters.ConfirmMotDePasseTableAdapter();
                DS_SP1.ConfirmMotDePasseDataTable oTable = Table.GetData(N_User, Equipe, Pass);
     
                return oTable;
    }
    Et ça marche !

    ------------------
    Je viens de réessayer et effectivement DBNull.value fonctionne également lorsque l'on appelle les fonctions stockées via des requetes du type : select * from MaFonction(xxx, DBNull.value, aaa).
    Pour que ça fonctionne il faut bien entendu utiliser les "SQLParameters", chose que je n'avais pas fait !
    ------------------

    Encore merci pour votre aide,
    Cordialement,
    Alex01
    Images attachées Images attachées  

  7. #7
    Membre confirmé Avatar de Vonziz
    Inscrit en
    Décembre 2006
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 215
    Par défaut
    OK je comprend mieux, VS te bloquait car tu n'avais pas configuré ton composant pour recevoir des DBNull... C'est bon à savoir. :p

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

Discussions similaires

  1. [SQL SERVER] Procédures stockées et mise en oeuvre de vues
    Par boby2600 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/06/2006, 09h13
  2. [SQL Server] Fonction COALESCE
    Par evans dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/04/2006, 15h19
  3. [SQL Server] fonction CONVERT
    Par dieudo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/02/2006, 13h08
  4. SQL Server Prcédure Stockée TimeOut
    Par Promesses dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2005, 08h18
  5. SQL Server / Fonction définie par l'utilisateur
    Par borgfabr dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2005, 15h14

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