Erreur compilation et argument exception

Résolu
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015 - 18 janv. 2008 à 16:52
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015 - 24 janv. 2008 à 15:13
Slt, en compilant une application réalisée en c# sous Visual Studio , couplé à une base de donnée Access , je recoit l'erreur suivante :

                     "Impossible de définir Column 'num_titre' à null. Utilisez DBNull à la place."

Comme vous l'aurez certainement compris, num_titre est le nom d'une colonne de la base de données.
J'aimerais donc savoir ce que cette erreur signifie et ce que je pourrait faire pour gérer cette exception !

Merci

12 réponses

djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
18 janv. 2008 à 21:02
Maintenant que j'y pense, si j'ai cette erreur, c'est peut être du fait que la requête ne renvoie aucun résultat !


Dans ce cas la, j'ai pensé à utilier une expression du genre qui devrait marcher :



if not curseur.Champs(nom du champs).Equals(dbnull.Value) then .....



Il me faudrait donc utiliser un curseur. Le problème est que moi je n'utilise aucun curseur de toute mon application et du coup, il n'y a aucun moyen de tester mon code avec ça !!!

Il me faudrait donc trouver une équivalence de cette expression mais qui n'utiliserai pas de curseur. Mais là encore je bugg !!!

Il me faudrait un peu d'aide !!!! Je peux compter sur vous j'espère !!!!

Merci d'avance .
3
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
18 janv. 2008 à 21:28
Je pense qu'avec un peu de code se sera peut être plus clair :

//création d'une nouvelle ligne
this.DtrGridA =
this.DtsGrid.Tables[
"maximusique_catalogue_titre"].NewRow();

//remplissage des champs
this.DtrGridA[
"num"] =
this.DtsGrid.Tables[
"maximusique_catalogue_titre"].Rows.Count + 1;

this.DtrGridA[
"num_titre"] =
this.CsV.Num;

this.DtrGridA[
"code_produit"] =
this.CsV.Album;

//ajout de la ligne à la table
this.DtsGrid.Tables[
"maximusique_catalogue_titre"].Rows.Add(DtrGridA);

//on met tout dans la base de donnée
this.CmdGrid =
new
OleDbCommandBuilder(Dta);
Dta.UpdateCommand = CmdGrid.GetUpdateCommand();
Dta.Update(DtsGrid,
"maximusique_catalogue_titre");

maximusique_catalogue_titre est ma table
DtsGrid est mon dataset
DtrGridA est mon datarow
CsV est ma classe avec les variables et leur propriétés ( set et get )

Ce sera peut être plus clair ! Merci d'avance !
3
mathvez Messages postés 42 Date d'inscription vendredi 5 janvier 2007 Statut Membre Dernière intervention 15 février 2008
18 janv. 2008 à 22:33
Utilise la fonction IsNull pour gérer ton exception :

if isNull(itemquicausel'exception)

Else

End if

D'après moi tu essai d'inserrer un enregistrement a ton tableau et le design de ta table ne peux contenir null pour ce champs, alors rempli tout les champs que tu ne veux pas avec une espace:  " " . Tu peux aussi enlever ta contrainte de null si tu as accès au design de ta table.

bonne continuation
3
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
21 janv. 2008 à 14:53
Salut merci pour ta reponse !!!

J'ai testé la fonction ISNULL mais malheureusement j'ai le même problème . Ce qui me semble être le plus bizare c'est que la table que j'utilise n'interdit pas les valeurs null !

En principe je n'aurai pas du avoir d'erreur à ce niveau là !

J'ai nettoyer ma solution et puis j'ai regénéré, avec l'espoir que ... mais bon voila ça ne marche toujours pas , donc je continue à chercher .

En tout cas, merci pour ta réponse et si tu à une autre idée, ou quelqu'un d'autre en a une, faites le moi savoir .

Merci encore
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
21 janv. 2008 à 15:03
As tu essayé de faire ca?

if (isNull(
this
.CsV.Num))

this
.DtrGridA[

"num_titre"
] = DBNull.Value;
else

this
.DtrGridA[

"num_titre"
] =

this
.CsV.Num;




il me semble que ca devrait marcher
(j'ai tapé le code de memoire, il doit y avoir des erreurs de syntaxe...)

Nul ne devient grand par la guerre...
3
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
21 janv. 2008 à 16:15
Merci !

Si c'est en tant que méthode que tu utilise ISNULL, il faut utiliser spécifier un datarow ! Ca donne donc le code suivant :         if

(DtrGridA.IsNull(
this.CsV.Num)) ....

Le code est correcte, mais lors de l'insertion, j'ai un autre message d'erreur qui apparait :

   L'argument 'name' ne peut pas être null.Nom du paramètre : name

J'ai essayé toutes les méthodes que je connais pour ISNULL, mais je recoit toujours un message d'erreur sur la même ligne !!!

Je me demande si ce n'est pas moi ki me suis trompé ! Mais merci pour ton idée !
3
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
21 janv. 2008 à 17:05
OK je comprend mieux ce que tu veu faire !!!

Mais selon moi, le probleme se situe au niveau de mon champs !!!

Je teste dans une autre interface, mon code passe et me met l'erreur à un autre endroit donc je vais retester, et regénérer
3
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
22 janv. 2008 à 14:00
Salut !

Ok je pense que j'ai trouvé l'erreur !!

En insérant des données dans la base de données Access , le champs "num_titre" prend par défaut la valeur "null" !

J'ai essayé de corriger l'erreur en modifiant diretement ce champs dans la base de données pour qu'il n'interdise plus les null mais, à chaque débogage , num_titre prend par défaut la valeur "null" !!!

Ca semble incroyable mais à chaque fois que je vérifie la BD dans mon dossier bin , ce champs à pour cette valeur !!!

Je n'y comprends plus rien donc j'ai voulu reprendre le code et trouver une façon plus simple d'insérer des données ( provenant de textbox et de combobox ) tout en chargeant une datagridview, mais il me semble que c'est la meilleur des solutions .

Donc je continue à chercher activement où est l'erreur et acepte volontiers toute aide !!!

Merci a vous
3
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
24 janv. 2008 à 15:13
Re salut a tous !!! Lol


Voila, je tenais juste à mettre la solution du probleme pour que ceux qui ont les mêmes erreurs que moi ou qui peuvent se servir du code pour leur programmation puisse en profiter ! Merci a Thot49 qui m'a donnée les explications necessaires pour résoudre mes problèmes !!


Il existe donc plusieurs erreurs dans le code : 
      - les données saisies ne sont jamais renvoyées dans les variables 
      - les tables de la base de données doivent posseder une clé primaire ( ce n'était pas le cas pour moi )

Le code corrigé donne donc ceci :


private
void ajout_Click(
object sender, System.
EventArgs e)


{



//on vérifi que tout les champs sont remplis








if
(

this
.txtAlbum.Text ==

null
||

this
.txtAuteur.Text ==

null
||

this
.txtComposit.Text ==

null
||

this
.txtKey.Text ==

null
||

this
.txtPiste.Text ==

null
||

this
.txtPoids.Text ==

null
||

this
.txtTitre.Text ==

null
||

this
.txtUrl.Text ==

null
){


MessageBox
.Show(

"Veuillez remplir tout les champs"
);}


else

{







//renvoie des données dans les variables






this
.CsV.Album =

this
.txtAlbum.Text;


this
.CsV.Auteur =

this
.txtAuteur.Text;


this
.CsV.Compositeur =

this
.txtComposit.Text;


this
.CsV.Key=

this
.txtKey.Text;


this
.CsV.Licence =

this
.txtLicence.Text;


this
.CsV.Piste =

this
.txtPiste.Text;


this
.CsV.Poids =

this
.txtPoids.Text;


this
.CsV.Prix =

this
.txtPrix.Text;


this
.CsV.Url =

this
.txtUrl.Text;


this
.CsV.Titre =

this
.txtTitre.Text;


this
.CsV.Temps =

this
.txtTemps.Text;


this
.CsV.SourceCry =

this
.txtSourCry.Text;


this
.CsV.Num =

this
.txtNum.Text;


this
.CsV.Fichier =

this
.cbxFichier.Text; 


//déclaration du data adapter






OleDbDataAdapter
Dta =

new



OleDbDataAdapter
(

this
.SqlGrid,

this
.Conn);


//création d'une nouvelle ligne






this
.DtrGridA =

this
.DtsGrid.Tables[

"maximusique_catalogue_titre"
].NewRow();


//remplissage des champs






this
.DtrGridA[

"num"
] =

this
.DtsGrid.Tables[

"maximusique_catalogue_titre"
].Rows.Count + 1;


this
.DtrGridA[

"code_produit"
] =

this
.CsV.Album;


this
.DtrGridA[

"titre"
] =

this
.CsV.Titre;


this
.DtrGridA[

"auteur"
] =

this
.CsV.Auteur;


this
.DtrGridA[

"compositeur"
] =

this
.CsV.Compositeur;


this
.DtrGridA[

"type_fichier"
] =

this
.CsV.Fichier;


this
.DtrGridA[

"poids"
] =

this
.CsV.Poids;


this
.DtrGridA[

"source_wma"
] =

this
.CsV.SourceCry;


this
.DtrGridA[

"temps"
] =

this
.CsV.Temps;


this
.DtrGridA[

"prix"
] =

this
.CsV.Prix;


this
.DtrGridA[

"Fichier_Key"
] =

this
.CsV.Key;


this
.DtrGridA[

"url_wma"
] =

this
.CsV.Url;


this
.DtrGridA[

"num_titre"
] =

this
.CsV.Piste;


this
.DtrGridA[

"Nombre_Licence"
] =

this
.CsV.Licence;


//ajout de la ligne à la table






this
.DtsGrid.Tables[

"maximusique_catalogue_titre"
].Rows.Add(DtrGridA);


//on met tout dans la base de donnée






this
.CmdGrid =

new



OleDbCommandBuilder
(Dta);Dta.UpdateCommand = CmdGrid.GetUpdateCommand();

Dta.Update(DtsGrid,


"maximusique_catalogue_titre"
);


MessageBox
.Show(

"Ajout effectué avec succes !"
);


//on met la sélection à vide






this
.txtAlbum.Text =

null
;


this
.txtAuteur.Text =

null
;


this
.txtComposit.Text =

null
;


this
.txtKey.Text =

null
;


this
.txtLicence.Text =

null
;


this
.txtPiste.Text =

null
;


this
.txtPoids.Text =

null
;


this
.txtPrix.Text =

null
;


this
.txtNum.Text =

null
;


this
.txtSourCry.Text =

null
;


this
.txtTemps.Text =

null
;


this
.txtUrl.Text =

null
;


this
.txtTitre.Text =

null
;

}

}

J'espère que ça vous sera utile !
3
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
21 janv. 2008 à 16:28
essaye d'ajouter:

this.DtrGridA.beginEdit();

avant tes
this.DtrGridA[...] = ...

et d'ajouter

this.DtrGridA.endEdit();
a la fin...

(je suis pas sur du nom exact des methodes....)

Nul ne devient grand par la guerre...
1
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
23 janv. 2008 à 15:32
Franchement  je trouve pas !!!

Peu importe ce que je peux faire, j'ai toujours la même erreur : 

      L'argument 'name' ne peut pas être null.Nom du paramètre : name

Là j'ai vraiment besoin de votre aide pour finaliser mon application !!!
0
djbabou Messages postés 155 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 23 novembre 2015
23 janv. 2008 à 15:36
Le probleme vient apparament du bout de code que voici :



         if



(DtrGridA.IsNull(CsV.Num)) .....

Cela signifie t-il que je dois pas utiliser le " ISNULL" directement sur mon datarow ??? Ou sa peut venir de quelque part d'autre ???
0
Rejoignez-nous