Erreur compilation et argument exception [Résolu]

djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 18 janv. 2008 à 16:52 - Dernière réponse : djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
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
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 18 janv. 2008 à 21:02
3
Merci
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 .

Merci djbabou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de djbabou
Meilleure réponse
djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 18 janv. 2008 à 21:28
3
Merci
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 !

Merci djbabou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de djbabou
Meilleure réponse
mathvez
Messages postés
42
Date d'inscription
vendredi 5 janvier 2007
Dernière intervention
15 février 2008
- 18 janv. 2008 à 22:33
3
Merci
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

Merci mathvez 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de mathvez
Meilleure réponse
djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 21 janv. 2008 à 14:53
3
Merci
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

Merci djbabou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de djbabou
Meilleure réponse
Miltiades
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Dernière intervention
25 octobre 2010
- 21 janv. 2008 à 15:03
3
Merci
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...

Merci Miltiades 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Miltiades
Meilleure réponse
djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 21 janv. 2008 à 16:15
3
Merci
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 !

Merci djbabou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de djbabou
Meilleure réponse
djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 21 janv. 2008 à 17:05
3
Merci
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

Merci djbabou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de djbabou
Meilleure réponse
djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 22 janv. 2008 à 14:00
3
Merci
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

Merci djbabou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de djbabou
Meilleure réponse
djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 24 janv. 2008 à 15:13
3
Merci
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 !

Merci djbabou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de djbabou
Miltiades
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Dernière intervention
25 octobre 2010
- 21 janv. 2008 à 16:28
1
Merci
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...
Commenter la réponse de Miltiades
djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 23 janv. 2008 à 15:32
0
Merci
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 !!!
Commenter la réponse de djbabou
djbabou
Messages postés
155
Date d'inscription
dimanche 21 octobre 2007
Dernière intervention
23 novembre 2015
- 23 janv. 2008 à 15:36
0
Merci
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 ???
Commenter la réponse de djbabou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.