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 :
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 ... // variable dans laquelle je veux stocké la dernière valeur enrgistrer en base private SqlInt32 _iDB_ID, ... ...
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 ... SqlCommand cmdToExecute = new SqlCommand(); cmdToExecute.CommandText = "dbo.[Insertion_de_mon_objet]"; cmdToExecute.CommandType = CommandType.StoredProcedure; ...
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) :
le probleme c'est que je n'arrive pas à mettre "cmdToExecute.Parameters["@iIDB_ID"].Value" dans ma variable "_iDB_ID".
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; ...
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
Partager