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 : 41
    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 : 63
    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
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  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;
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 40
    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