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#] Problème de casting de @IDENTITY


Sujet :

Accès aux données

  1. #1
    Membre éclairé Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Par défaut [C#] Problème de casting de @IDENTITY
    Bonjour.

    Je fais une requete comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SqlCommand sqlInsert = new SqlCommand("INSERT INTO T_Truc VALUES (@p1,@p2,...)", sqlCon, t);
     
    sqlInsert.executeNonQuery();
    Ensuite je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SqlCommand sqlQuery = new SqlCommand("SELECT @@IDENTITY",sqlCon,t);
    m_Id = (int)sqlQuery .ExecuteScalar();
    et ceci me lance une exception sur le casting à la dernière ligne. Pourtant ds ma base, la colonne clé primaire est bein de type int.

    Quelqu'un à une idée ? Merci

  2. #2
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Par défaut
    Tu es certains que ta colonne n'est pas un GUID ?

    Bon, je n'avais qu'une base Access sous la main, mais ca fonctionne pareil si c'est une clé primaire en INT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int newID = 0;
        OleDbCommand idCMD = new OleDbCommand("SELECT @@IDENTITY", myConn);
       newID = (int)idCMD.ExecuteScalar();
    et ca fonctionne...

    #Update
    Pourquoi tu ne récupères pas ton IDENTITY directement après l'insert ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string sql = "insert into [..]";
    SqlCommand myCMD = new SqlCommand(sql, conn);
    int newID = (int)myCMD.ExecuteScalar();
    [/quote]

  3. #3
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    Tu devrais utiliser Scope_Identity. Et l'erreur de Cast viens du fait que tu récupère un decimal.

  4. #4
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Par défaut
    Oui, sauf si il bosse avec une base SqlServer 7 .. et ca existe encore.

    Mais sinon, le premier code que j'ai donné fonctionne, car si je me souviens, cest du code que jai mis dans mon snippet à partir de la MSDN.

    Et puis le cast decimal en int explicité doit passer dans tous les cas.

  5. #5
    Membre éclairé Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Par défaut
    J'utilise sqlServer2000.

    Comment ça se fait que je peux pas caster un decimal en int ?

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Essaye avec un Convert.ToInt32

  7. #7
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    Je crois que le problème vient du fait qu'il y a déjà un Cast implicit puisque la valeur renvoyée est de type object. Mais je n'en suis pas sur du tout.

    Enfin le code suivant fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    decimal Interm;
    int Result;
    Interm= (decimal) this.sqlCommand1.ExecuteScalar();
    Result=decimal.ToInt32(Interm);

  8. #8
    Membre éclairé Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Par défaut
    Je vais utiliser ça. Merci à tous.

    En gros il faut juste retenir qu'@@Identity renvoit un decimal...

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

Discussions similaires

  1. [C#]problème de casting
    Par Blo0d4x3 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/05/2006, 15h56
  2. [CASTS]problème de cast de Time
    Par DeVoN dans le forum Langage
    Réponses: 7
    Dernier message: 22/02/2006, 17h24
  3. [JDBC Driver][JSTL] Problème de cast de données
    Par GyLes dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/09/2005, 10h00
  4. problème de cast!
    Par LaseLiep dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2005, 09h30
  5. Problème de cast/serialization/externalization ?
    Par Linlin dans le forum CORBA
    Réponses: 1
    Dernier message: 06/12/2004, 16h46

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