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!!
Version imprimable
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??Citation:
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:
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:object value = reader.GetValue(0);
Ben g beau mettremais cela me donne rien car a chque fois l'instruction s'arréte au niveau deCode:object value = rader.GetValue(0);
je comprend pas comment faire la vraiment suis big bloké!!Code: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??Citation:
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:
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(); }
Suis d'accord avec toi, le problème doit bien provenir de la récupération du statutClient.
Donc j'ai modifié :par :Code:value = rader.GetString(0);
mais malheureusement cela m'affiche toujours la même erreur.Code: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: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:command.Parameters.Add("@NomClt", SqlDbType.VarChar, 40);
Donc g modifié ce qui me donne :mais j'ai toujours le même problème.Code: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:
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. 8O
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:
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:
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!!Citation:
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.
Merci, pour les infos et heureusement que t'es la :yaisse2: DBCommand.Parameter c'est bien de l'ADO.NET, c'est propre à .NET je me trompe pas quand je dis ça, mais tu as bien raison sur le fait qu'on peut le faire avec les declares, il faut que je revois mon niveau de SQL ...
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.