Donne la valeur <NULL> à un champs de type bit lors d'un update

Signaler
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2007
-
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2007
-
bonjour,

je voudrais updater un champs de type bit dans une table de ma base de données (SQL Server 2000) avec la valeur <NULL>
pour cela j'ai coché la case Allow Nulls lors de la construction de la table et mis "(null)" dans la propriété Default Value de mon champs de type bit.

Pourtant dans ma méthode d'update je spécifie

SqlBoolean.Null et au lieu d'inscrire la valeur <NULL>, mon champs prend pour valeur 0.

que faire ?

Merci de votre aide

13 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonjour,

peux tu nous montrer ton code ? car tout semble bon.

<hr />Cyril - MVS - MCP
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2007

ma classe d'accès:








public





static
bool


Update(int id, SqlBoolean


includedMemoryCard)
{
   DataClasses.Parameters.spU_CameraDetails param = new DataClasses.Parameters.spU_CameraDetails



();


   DataClasses.StoredProcedures.spU_CameraDetails  sp = new DataClasses.StoredProcedures.spU_CameraDetails();



   param.SetUpConnection(


ConfigurationManager.ConnectionStrings["ConnectionString"
].ToString());




   param.Param_ID = idReflex;



   if

(!includedMemoryCard.IsNull) 
      param.Param_IncludedMemoryCard = includedMemoryCard;
   else


 
      param.Param_IncludedMemoryCard_UseDefaultValue();






   sp.Execute(

ref

param);
}

ma table:
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
il me semble qu'on fait un truc du genre normalement

command.paramaeters.Add("@toto", DBNull.Value);

la je ne vois pas le problème car je ne connais pas le fonctionnement de tes types métiers :-/

<hr />Cyril - MVS - MCP
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2007

en fait j'utilise Olymars pour générer mes procédures stockées et mes classes d'accèes.

pour adapter le DBNull.Value j'ai donc écrit:
param.Param_IncludedMemoryCard =

DBNull.Value;

mais ERROR : "Cannot implicitly convert type 'System.DBNull' to 'System.Data.SqlTypes.SqlBoolean' "

j'ai donc remplacé par SqlBoolean.Null mais rein n'y fait, il enregistre 0!

La solution réside peut-être dans la construction manuelle de ma méthode d'upadte pour réussir à enregistrer DBNull.Value!?
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Je connais pas OlyMars donc je sais pas comment il fonctionne :( Regarde avec SQL profiler p our voir quel est la requete envoyé à SQL ca devrait aider :-/

La solution de passer par la construction manuelle est une vraie fausse solution, car c'est pas trés propre ... :-s

<hr />Cyril - MVS - MCP
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2007

Je viens de découvrir grâce à toi SQL Profiler (merci!)
Dans l'historique, la procédure est au statut "RPC:Completed" et dans le Textdata... , @IncludedMemoryCard NULL, @ConsiderNull_IncludedMemoryCard default, ...
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2007

j'ajouterai que dans la colonne Writes la valeur est à 0.... donc forcément... ceci dit je ne vois toujours pas comment résoudre le pb :s
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Tu n'es pas dans un context transactionnel ? qui aurait fait un rollback ?

c'est quoi exactement le code SQL généré ?

<hr />Cyril - MVS - MCP
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2007

exec spU_CameraDetails @ID = 8, @ID_Camera = 1, @ConsiderNull_ID_Camera = default, @IncludedMemoryCard = NULL, @ConsiderNull_IncludedMemoryCard = default, @InternalMemory = 1, @ConsiderNull_InternalMemory = default, @VideoMode = 0, @ConsiderNull_VideoMode = default, @Webcam = 1, @ConsiderNull_Webcam = default, @Weight = 0, @ConsiderNull_Weight = default, @Dimensions = '1,23 x 4,56 x 78,9', @ConsiderNull_Dimensions = default, @Resolution = 0.000000000000000e+000, @ConsiderNull_Resolution = default


 
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Erf ca m'avance pas des masses ca, tu pourrais me monter la SP spU_CameraDetails stp ? :D

<hr />Cyril - MVS - MCP
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2007

autant pour moi :)... en meme temps, elle fait 1987 lignes... et oui OlyMars n'y va pas à moitié!
y a-t-il un moyen pour que je te l'envoie par mail ?
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
une SP de 1987 lignes ? pas besoin de me l'envoyer je vais meme pas la regarder ... :p D'aprés ce que je vois je dirais que le problème n'est pas au niveau du code .net tout est bon jusqu'a l'arrivée de la requete dans SQL donc c'est la bas que ca merdouille :s Tu n'as pas coché une case ConvertNull to false ou un truc du genre dans OlyMars ? tu as bien regenré le code aprés avoir modifié la base ? je ne connais pas du tout OlyMars donc je vais pas pouvoir t'aider plus que ca :s

<hr />Cyril - MVS - MCP
Messages postés
25
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
15 mars 2007

je vais aller checker du côté de la configuration d'Olymars. en tout cas merci beaucoup pour ton aide!!