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

ASP.NET Discussion :

Problème de Cast suite au renvoie d'un SqlInt32 par une procédure stockée


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Problème de Cast suite au renvoie d'un SqlInt32 par une procédure stockée
    Bonjour à tous,

    J'ai un soucis de cast suite au renvoie d'un SqlInt32 par une procédure stockée (BD : SqlServer 2000) dont le principe est que j'insere une ligne dans ma table, cette ligne comporte un champs (identifiant) qui s'incrémente automatiquement. Après avoir inseré ma ligne (jusque là mon programme se déroule bien) je souhaite récuperer mon identifiant (en l'occurence le dernier enregistrer SCOPE_IDENTITY()).
    Pour se faire, j'ai, dans une classe (appellé classe1, pour les besoins du post), définit une variable de type SqlInt32 comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    // variable dans laquelle je veux stocké la dernière valeur enrgistrer en base
    private SqlInt32 _iDB_ID, ...
    ...
    Lors de mon "INSERT", j'appelle une fonction "bool Insert()" de la classe en question (classe1) qui creer les objets necessaires à l'execution de ma commande SQL comme le montre le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    SqlCommand cmdToExecute = new SqlCommand();
    cmdToExecute.CommandText = "dbo.[Insertion_de_mon_objet]";
    cmdToExecute.CommandType = CommandType.StoredProcedure;
    ...
    Ensuite dans cette même fonction je passe mes parametres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    cmdToExecute.Parameters.Add(new SqlParameter("@siIDB_FLAGVISIBLE", SqlDbType.SmallInt, 2, ParameterDirection.Input, true, 5, 0, "", DataRowVersion.Proposed, _iDB_FLAGVISIBLE));
    // ici ci-apres le paramètre qui m'interesse :
    cmdToExecute.Parameters.Add(new SqlParameter("@iIDB_ID", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _iDB_ID));
    cmdToExecute.Parameters.Add(new SqlParameter("@iErrorCode", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, 0));
    ...

    Enfin j'execute de ma requete et j'essaye de recuperer mon identifiant (c'est là que j'ai mon soucis) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    _rowsAffected = cmdToExecute.ExecuteNonQuery();
    _iDB_ID = (Int32) cmdToExecute.Parameters["@iIDB_ID"].Value;
    _errorCode = (Int32)cmdToExecute.Parameters["@iErrorCode"].Value;
    ...
    le probleme c'est que je n'arrive pas à mettre "cmdToExecute.Parameters["@iIDB_ID"].Value" dans ma variable "_iDB_ID".
    De plus là ou c'est bizarre c'est en mode debug lorsque je passe mon curseur sur la propriété ".Value", j'ai le numéro de l'identifiant qui est correct !! Mais quand je survole la variable "_iDB_ID", sa valeur est NULL et l'exception levé est "System.Exception.InvalidCastException"

    PS : cette erreur est survenue apres une migration du Framework 1.1 (Visual Studio 2003) au Framework 2.0 (Visual Studio 2005), peut etre cela aidera !! lol

    Avez vous déjà rencontré ce problème ?
    Savez vous d'ou cela pourrais venir ?

    Merci d'avance pour votre collaboration
    Cordialement

    Edouard DANARADJOU

  2. #2
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    MSDN ->

    SqlInt32.Value Property
    Gets the value of this SqlInt32 structure. This property is read-only.

    De rien.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par neptune Voir le message
    MSDN ->

    SqlInt32.Value Property
    Gets the value of this SqlInt32 structure. This property is read-only.

    De rien.
    Désolé mais je ne comprends pas bien ta réponse !!

    En fait si tu me dis (MSDN dit !! lol) que SqlInt32 est une structure en lecture seule !
    As tu une solution à me proposer ?

  4. #4
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Non, j'essaie de te dire qu'un objet de type SqlInt32 à une propriété Value qui retourne un int.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Quand j'ecris ce code là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int _iDB_ID = (SqlInt32) cmdToExecute.Parameters["@iIDB_ID"].Value;
    L'IDE me renvoit l'erreur suivante :
    Impossible de convertir implicitement le type "System.Data.SqlTypes.SqlInt32" en "int. Une convertion existe (un cast est-il manquant ?)
    Encore une fois peut etre ai je mal compris ta réponse ?!
    Merci

    Edouard DANARADJOU

  6. #6
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Ne fonctionne pas
    //int _iDB_ID = (SqlInt32) cmdToExecute.Parameters["@iIDB_ID"].Value;
     
    SqlInt32 sqlInt = (SqlInt32) cmdToExecute.Parameters["@iIDB_ID"].Value;
    int _iDB_ID = sqlInt.Value;

  7. #7
    Membre habitué

    Inscrit en
    Octobre 2002
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 139
    Points : 177
    Points
    177
    Par défaut
    Hello,
    tu viens de dire que tu es en 2.0 donc tu peux utiliser la fonction De plus, le paramètre que tu utilises dans la procédure stockée est-il marqué en OUTPUT?

    krest

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    J'ai essayé mais cela ne marche toujours pas !

    Ma Variable "_IDB_ID" est a NULL et donc me leve une exception System.Exception.SqlNullValueException !!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/11/2014, 10h47
  2. Problème de résultat retourné par une procédure stockée
    Par Access Newbie dans le forum Access
    Réponses: 23
    Dernier message: 17/08/2006, 11h42
  3. Problème d'alter table dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2005, 09h19
  4. Problème avec un LIKE dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2004, 14h38
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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