Salut,
C'est vrai que le statut n'est pas de type string mai de type VarChar mais le problème c'est qu'il n'existe pas de GetVarChar.
Donc que puis-je mettre a la place??
merci d'avance!!
Salut,
C'est vrai que le statut n'est pas de type string mai de type VarChar mais le problème c'est qu'il n'existe pas de GetVarChar.
Donc que puis-je mettre a la place??
merci d'avance!!
Normalement, c'est GetString justement... Tu as vérifié que le champ n'était pas DBNull.Value avant d'appeler la méthode GetString. Il y a une méthode IsDbNull sur le reader, elle sert à tester si le champ est rempli avant de pouvoir y accéder.
Ben même si je met IsDbNull ca revient au même.
J'ai pas compris ce que ta voulu dire par :Qu'a tu voulu dire par là?? Comment dois-je faire??Tu as vérifié que le champ n'était pas DBNull.Value
merci d'avance!!
Avant de lire une donnée d'un reader, on vérifie toujours qu'il y a une donnée dedans, par exemple :
Au pire, pour déterminer quelle méthode GetXXX tu dois utiliser, tu fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 while (monReader.Read()) { String valeur = null; // On part du principe que le champ à l'index 0 est de type nvarchar dans la base if (monReader.IsDbNull(0) == false) valeur = monReader.GetString(0); }En mettant un point d'arrêt sur cette instruction, tu pourras déterminer quel type a été mis dans object et ensuite, à partir de là, tu sauras quel GetXXX il fallait utiliser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part object value = reader.GetValue(0);
Ben g beau mettremais cela me donne rien car a chque fois l'instruction s'arréte au niveau de
Code : Sélectionner tout - Visualiser dans une fenêtre à part object value = rader.GetValue(0);je comprend pas comment faire la vraiment suis big bloké!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part SqlDataReader rader = command.ExecuteReader();
merci d'avance pour toute votre aide a tous!!
Je vient de tester la requête sous l'analyseur de requête de SqlServer grâce au debuggage et a l'espion (ajouter un espion) mais le problème c'est qu'il ne change pas @nomclt avec le résultat choisi précédement c'est à dire que @nomClt reste @nomClt.
Il vient peut être de la mon problème?? Qu'en pensez-vous??
Faut savoir également que quand j'ai voulu tester avec l'analyseur de requête, il m'a affiché :comment je peux résoudre ce problème d'après vous??Serveur*: Msg 137, Niveau 15, État 2, Ligne 1
La variable '@NomClt' doit être déclarée.
merci d'avance!!
Tu peux pas procéder ainsi, car tu utilise une requête avec des paramétres et non des valeurs(qui sont intérprété lors de la compilation) requête destiné à être utiliser par un programme .NET (en utilisant une particularité d'ADO.NET et non de SQL).
Bref, si tu veux faire des tests directement dans SQL Server, il te faut mettre des valeurs ...
Ton problème ne peut venir en aucun de la.
Ok. C'est vrai vu comme ça tu as tout a fais raison.
Mais d'ou peux provenir mon problème alors??
merci d'avance!!
Je vois pas du tout comment je peux résoudre mon problème qui est le suivant :
Lorsque j'exécute mon application, je choisi le nom du client mais lorsqu'il doit m'afficher le statut du client, il m'affiche l'erreur suivante :
" Une exception non gérée du type 'System.InvalidCastException' s'est produite dans system.data.dll
Informations supplémentaires*: L'objet doit implémenter IConvertible."
j'attend vraiment votre aide car je vois pas du tout comment régler ce problème.
merci d'avance pour votre aide!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 SqlConnection connection; SqlCommand command; connection = new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=DistribInfo;Integrated Security=SSPI"); connection.Open(); string requete = ("SELECT C_STATUCLT FROM CLIENT WHERE CLIENT.C_NOMCLT= @NomClt"); command = new SqlCommand(requete,connection); command.Parameters.Add("@NomClt", SqlDbType.VarChar); command.Parameters["@NomClt"].Value = NomClient; SqlDataReader rader = command.ExecuteReader(); try { while (rader.Read()) { string value = null; // On part du principe que le champ à l'index 0 est de type nvarchar dans la base if (rader.IsDBNull(0) == false) { value = rader.GetString(0); } } } catch(Exception ee) { MessageBox.Show(ee.Message); } finally { connection.Close(); }
Le problème est quand tu récup le statut à priori, essaie de faire quelque chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part reader[C_STATUCLT].ToString()
Suis d'accord avec toi, le problème doit bien provenir de la récupération du statutClient.
Donc j'ai modifié :par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part value = rader.GetString(0);mais malheureusement cela m'affiche toujours la même erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part value = rader["C_STATUCLT"].ToString();
merci d'avance!!
La vérité est ailleurs ...
Au faite je croix que ça viens plutôt de cette ligne :
mets :
Code : Sélectionner tout - Visualiser dans une fenêtre à part command.Parameters.Add("@NomClt", SqlDbType.VarChar);
Le 40 tu le change par la valeur que tu as mis dans VarChar (ds ta BD t'as du faire Varchar(Taille) eh ben tu remets taille, la ou c'est jaune (le 40) ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part command.Parameters.Add("@NomClt", SqlDbType.VarChar, 40);
Donc g modifié ce qui me donne :mais j'ai toujours le même problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part command.Parameters.Add("@NomClt", SqlDbType.Char, 20);
PFFFF je vois vraiment pas pourquoi??!!
merci d'avance
Bien sur que si, il suffit de déclarer la variable comme suggéré par le message d'erreur.
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DECLARE @numClient as int SET @numClient = 3
Tout ceci est complètement faux
Les paramètres SQL ne sont absolument pas gérés par le compilateur.
C'est une fonctionnalité des bases de données (SQL Server, Oracle, etc), ce n'est en aucun cas spécifique à .NET. Et donc en déclarant les variables juste avant la requête SQL dans l'analyseur de requêtes, on peut parfaitement utiliser les paramètres SQL; ils sont d'ailleurs là pour qu'on s'en serve.
Tu peux te documenter sur les paramètres ici : http://johannblais.developpez.com/tu...acces-donnees/
Est ce que tu es absolument sûr que ton champ dans la base est bien de type VarChar et pas de type NVarChar ?
Le paramètre doit avoir exactement le même type.
Bonjour tout le monde,
Mon champ "C_NOMCLT" dans la base est bien de type Char. Je suis désolé je m'en suis rendu compte hier qu'il n'étais pas de type VarChar.
Cela changent-il quelque chose dans mon code??
A la place de 3, je dois mettre le nom de ma combo qui correspond a cette variable??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DECLARE @nomClient AS int SET @nomClient = 3
merci d'avance!!
Je vous remez le code en espérant que vous pouriez m'éclairer même m'aider car je vois vraiment pas pourquoi je reçois le message suivant lorsque j'exécute mon application.
le message d'erreur est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 SqlConnection connection; SqlCommand command; connection = new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=DistribInfo;Integrated Security=SSPI"); connection.Open(); string requete = ("SELECT C_STATUCLT FROM CLIENT WHERE CLIENT.C_NOMCLT= @NomClt"); command = new SqlCommand(requete,connection); command.Parameters.Add("@NomClt", SqlDbType.Char, 20); command.Parameters["@NomClt"].Value = NomClient; SqlDataReader rader = command.ExecuteReader(); try { while (rader.Read()) { string value = null; // On part du principe que le champ à l'index 0 est de type char dans la base if (rader.IsDBNull(0) == false) { value = rader["C_STATUCLT"].ToString(); } } } catch(Exception ee) { MessageBox.Show(ee.Message); } finally { connection.Close(); }
merci d'avance!!Une exception non gérée du type 'System.InvalidCastException' s'est produite dans system.data.dll
Informations supplémentaires*: L'objet doit implémenter IConvertible.
Ok mais pour mon problème, je vois vraiment pas comment faire pour le résoudre.
Ca commence a me stresser car je perd du temps puis je vois vraiment pas comment résoudre!!
Merci d'avance pour votre aide!!
Cordialement
Loic V.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager