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

Accès aux données Discussion :

[C#/Sql Server] Comment passer un paramètre null à une procédure stockée ?


Sujet :

Accès aux données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut [C#/Sql Server] Comment passer un paramètre null à une procédure stockée ?
    Bonjour,

    Je bloque sur le problème suivant, j'aimerai passer un paramêtre null à ma procédure stockée seulemement ça ne fonctionne pas, voici le code :

    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
     
    //SqlConnection con = new SqlConnection
    (System.Configuration.ConfigurationSettings.AppSettings
    ("Soccer.Properties.Settings.SoccerDatabaseConnectionString"));
     
    SqlConnection con = new SqlConnection("Data Source=*****;Initial
     Catalog=SoccerDatabase;Integrated Security=True");
     
    SqlCommand command = new SqlCommand("get_fixture", con);
    command.CommandType = CommandType.StoredProcedure;
     
    command.Parameters.Add("@CountryName", SqlDbType.VarChar, 30).Value
     = country.Trim();
    command.Parameters.Add("@LeagueName", SqlDbType.VarChar, 30).Value
     = league.Trim();
    command.Parameters.Add("@TeamName", SqlDbType.VarChar, 30).Value =
     "ZZZ";
    command.Parameters.Add("@NbPastSeason", SqlDbType.Int, 4).Value = 
    nbSeason;
    command.Parameters.Add("@FixtureStatus", SqlDbType.VarChar, 3).Value = 'P';

    La solution temporaire a été d'utiliser un valeur bidon 'ZZZ' pour le paramêtre @TeamName afin d'éviter le null, mais j'aimerai bien avoir un solution plus clean. Avez-vous une idée ?


    je vous remercie

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Tu as essayé DBValue.Null ?

  3. #3
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Points : 1 076
    Points
    1 076
    Par défaut
    Si la solution de Morpheus ne marche pas alors quelle est l'erreur retournee? Le champ de ta base accepte t'il les null?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    oui mon champ accepte bien les null.
    J'ai essayé votre solution voici l'erreur que j'obtenais :

    Error 2 Argument '3': cannot convert from 'System.DBNull' to 'string'
    j'ai donc ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.DBNull.value.tostring()
    mais maintenant ma proc ne renvoie plus rien.

    merci pour votre aide, je continue à chercher

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Puisque que c'est une string qui est attendue donc pourquoi ne pas simplement passer une chaîne vide

  6. #6
    Nip
    Nip est déconnecté
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    963
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 963
    Points : 1 076
    Points
    1 076
    Par défaut
    Et si tu utilises la syntaxe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SqlParameter parameter = new SqlParameter();
    parameter.ParameterName = "@TeamName";
    parameter.Value = DBNull.value;
    command.Parameters.Add(parameter, SqlDbType.VarChar, 30)
    Ca te donne toujours la meme erreur?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    J'ai essayé les deux solutions (chaine vide et parametre a DBnull.Value) mais cela me renvoie un résultat vide. Après avoir essayé pas mal de chose coté procédure stockée et code C# j'ai trouvé une solution qui fontionne :

    dans la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE PROCEDURE get_fixture
     
    @CountryName varchar(30),
    @LeagueName  varchar(30),
    @TeamName varchar(30) = null, 
    @NbPastSeason int,
    @FixtureStatus varchar(3)
     
    AS
    ...
    dans mon code C# :

    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
     
    SqlCommand command = new SqlCommand("get_fixture",con);
    command.CommandType = CommandType.StoredProcedure;
     
    command.Parameters.Add("@CountryName",SqlDbType.VarChar,30).Value
     = CountryName.Trim() ;
    command.Parameters.Add("@LeagueName", SqlDbType.VarChar, 30).Value
     = LeagueName.Trim();
    command.Parameters.Add("@TeamName", SqlDbType.VarChar, 30).Value =
     TeamName;
    command.Parameters.Add("@NbPastSeason",SqlDbType.Int,4).Value =
     NbPastSeason;
    command.Parameters.Add("@FixtureStatus", SqlDbType.VarChar, 3).Value
     = FixtureStatus.Trim();
     
    ...
     
    LoadDataDataGridView(CountryName, LeagueName, null, 0, "P");
    Je vous remercie bcp pour votre aide et votre réactivité

  8. #8
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    Il suffit de passer Convert.DBNull a ta SP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    command.Parameters.Add("@ZipCode", SqlDbType.NChar).Value = string.IsNullOrEmpty(Ta_valeur) ? Convert.DBNull : Ta_Valeur;

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 31
    Points
    31
    Par défaut
    merci j'avais le même souci, Convert.DbNull fonctionne à merveille !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/08/2007, 11h02
  2. Réponses: 8
    Dernier message: 17/03/2006, 08h06
  3. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  4. [SQL Server] Passage d'un paramètre dans une procédure
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/01/2005, 13h19

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