J'avais pas pensé mettre le code dans l'analyseur de requête de Sql Server 2000.
Et il me dit que l'instruction "Insert Into..." est trop long!! ça vient peut être de la??
merci d'avance!!
Version imprimable
J'avais pas pensé mettre le code dans l'analyseur de requête de Sql Server 2000.
Et il me dit que l'instruction "Insert Into..." est trop long!! ça vient peut être de la??
merci d'avance!!
Bonjour,
Tout d'abord, merci pour tes conseils.
Je sais que C# est un langage POO et que j'ai des difficultées mais ché la vie!!
J'ai lu beaucoup de tuto, de cours.... mais j'ai toujours eu des difficulté mais suis arrivé ici, je ne vas pas laché comme ça!!
cordialement.
Vérifie bien, que ce que tu essaie d'insérer ont les mêmes types que dans la bases de données ...
dans ton Insert, il faut que tu lui donne comme parameters des types compatible (convertible) à ceux présent dans la base. (Tu as pas mis de textbox sans le .Text ect.).
Pour tester tu peux aller plus loin, en mettant des valeurs à la place de tes variables pour tester et savoir, si ça vient des parameteres ou d'ailleurs.
j'ai déja vérifié et je crois que c'est bon.Citation:
dans ton Insert, il faut que tu lui donne comme parameters des types compatible (convertible) à ceux présent dans la base. (Tu as pas mis de textbox sans le .Text ect.).
J'ai remarqué que mon INSERT INTO était trop long donc ca vient peut être de la le problème??
Donc j'essai de voir comment je peux le réduire vu qu'il y a des champs qui ne peuve pas être égal à "Null". Si vous connaissez une façon de faire pour réduire la requête ou d'agrandir la longueur maximal autorisé??
Sinon je vien d'essayer avec des valeurs et cela fonctionne donc si je met les paramètre ma requête est trop longue.
merci d'avance!!
Ben lorsque je test mon code dans l'analyseur de requête en mettant :
il me dit :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
30
31
32
33
34
35
36
37 SqlParameter paramNInter = new SqlParameter("@NumInter", SqlDbType.VarChar, 15); paramNInter.Value = NumIntervention.Text; SqlParameter paramNClt = new SqlParameter("@NumClt", SqlDbType.VarChar, 13); paramNClt.Value = NumClt.Text; SqlParameter paramNClt1 = new SqlParameter("@NumClt1", SqlDbType.VarChar, 13); paramNClt1.Value = NumClt.Text; SqlParameter paramNMat = new SqlParameter("@NumMachine", SqlDbType.Decimal, 13); paramNMat.Value = NumMachine.Text; SqlParameter paramResInter = new SqlParameter("@RaisonInter", SqlDbType.VarChar, 250); paramResInter.Value = RaisonInter.Text; SqlParameter paramLieInter = new SqlParameter("@LieInter", SqlDbType.Text); paramLieInter.Value = LieuInter.SelectedItem.ToString(); SqlParameter paramDepo = new SqlParameter("@Depositaire", SqlDbType.Char, 50); paramDepo.Value = Dépositaire.SelectedItem.ToString(); SqlParameter paramRecep = new SqlParameter("@Receptionneur", SqlDbType.Char, 20); paramRecep.Value = Réceptionneur.SelectedItem.ToString(); SqlParameter paramDPrisCharg = new SqlParameter("@DPrisCharg", SqlDbType.DateTime, 8); paramDPrisCharg.Value = DatePrisEnCharge; string sql = string.Format("INSERT INTO INTERVENTION(IN_NUMINTER, IN_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_LIEINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG) VALUES({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8})", paramNInter.ParameterName, paramNClt.ParameterName, paramNClt1.ParameterName, paramNMat.ParameterName, paramResInter.ParameterName, paramLieInter.ParameterName, paramDepo.ParameterName, paramRecep.ParameterName, paramDPrisCharg.ParameterName); SqlCommand cmd = new SqlCommand(sql.ToString(), connection); cmd.Parameters.Add(paramNInter); cmd.Parameters.Add(paramNClt); cmd.Parameters.Add(paramNClt1); cmd.Parameters.Add(paramNMat); cmd.Parameters.Add(paramResInter); cmd.Parameters.Add(paramLieInter); cmd.Parameters.Add(paramDepo); cmd.Parameters.Add(paramRecep); cmd.Parameters.Add(paramDPrisCharg);
je trouve ça bizarre aussi mais bon.Citation:
Serveur*: Msg 170, Niveau 15, État 1, Ligne 1
Ligne 1 : syntaxe incorrecte vers '='.
Serveur*: Msg 103, Niveau 15, État 1, Ligne 20
Le identificateur qui commence par 'INSERT INTO INTERVENTION(IN_NUMINTER, IN_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_LIEINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PR' est trop long. La longueur maximale est 128.
Pour réduire une ligne de requete tu peux faire ceci :
Code:
1
2 string requete = "mon_texte_qui_est_tres_long "" +"et_que_je_coupe_sur_une_autre_ligne";
Oui, faut que je me réveille ce matin!!LOL.
Mais si on lui fait :c'est à dire que j'ai changé :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
30
31
32
33
34
35
36
37 SqlParameter paramNInter = new SqlParameter("@NumInter", SqlDbType.VarChar, 15); paramNInter.Value = '2008/02/19-002'; SqlParameter paramNClt = new SqlParameter("@NumClt", SqlDbType.VarChar, 13); paramNClt.Value = 'hf'; SqlParameter paramNClt1 = new SqlParameter("@NumClt1", SqlDbType.VarChar, 13); paramNClt1.Value = 'hf'; SqlParameter paramNMat = new SqlParameter("@NumMachine", SqlDbType.Decimal, 13); paramNMat.Value = '1'; SqlParameter paramResInter = new SqlParameter("@RaisonInter", SqlDbType.VarChar, 250); paramResInter.Value = 'graph'; SqlParameter paramLieInter = new SqlParameter("@LieInter", SqlDbType.Text); paramLieInter.Value = 'site'; SqlParameter paramDepo = new SqlParameter("@Depositaire", SqlDbType.Char, 50); paramDepo.Value = 'gr'; SqlParameter paramRecep = new SqlParameter("@Receptionneur", SqlDbType.Char, 20); paramRecep.Value = 'vivien'; SqlParameter paramDPrisCharg = new SqlParameter("@DPrisCharg", SqlDbType.DateTime, 8); paramDPrisCharg.Value = '19/02/2008'; string sql = string.Format("INSERT INTO INTERVENTION(IN_NUMINTER, IN_NUMCLT, IN_M_NUMCLT, IN_IDMAT, IN_RESINTER, IN_LIEINTER, IN_DEPOMAT, IN_RECEPMAT, IN_PRICHARG) VALUES({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8})", paramNInter.ParameterName, paramNClt.ParameterName, paramNClt1.ParameterName, paramNMat.ParameterName, paramResInter.ParameterName, paramLieInter.ParameterName, paramDepo.ParameterName, paramRecep.ParameterName, paramDPrisCharg.ParameterName); SqlCommand cmd = new SqlCommand(sql.ToString(), connection); cmd.Parameters.Add(paramNInter); cmd.Parameters.Add(paramNClt); cmd.Parameters.Add(paramNClt1); cmd.Parameters.Add(paramNMat); cmd.Parameters.Add(paramResInter); cmd.Parameters.Add(paramLieInter); cmd.Parameters.Add(paramDepo); cmd.Parameters.Add(paramRecep); cmd.Parameters.Add(paramDPrisCharg);
enCode:paramNClt.Value = NumClt.Text;
mais toujours pareil.Code:paramNClt.Value = 'hf';
Cette ligne c'est du C#, ni du SQL, ni un langage connu dans SQL Server ... Comme tt le reste du code ...Code:SqlParameter paramNInter = new SqlParameter("@NumInter", SqlDbType.VarChar, 15);
Les chaînes de caractère sont entre doubles quote en C#, pas entre simple quote.
Je pense qd meme que tu t'y prend mal pour faire ton insertion ...
D'abord, tt tes parametres sont de type string ce qui est à mon avis n'est pas normal, tu dois les convertir au bon type (par exemple IN_NUMINTER doit être de type int, non ? Si c'est le cas alors ton @NumInter doit être aussi du même type ...
Y a bcp de choses que tu dois voir, ce qui explique certains messages et conseils qui t'ont été donné ... Il est vrai qu'on apprend tjs, mais c plus simple qd on a les bases ... La t'essaie d'apprendre dans la douleur, je te dis bon courage
Ma base :
* IN_NUMINTER est bien de type varchar dans la base.
* IN_NUMCLT est de type varchar également.
* IN_IDMAT est de type int.
* IN_RESINTER est de type varchar.
* IN_LIEINTER est de type text.
* IN_DEPOMAT et IN_RECEPMAT est de type char.
* IN_PRICHARG est de type dateTime.
donc je crois par rapport a ce que l'on ma dit que mes SqlDbType sont bon.
Mon formulaire :
* 'NumIntervention' et un label
* 'NumClt' et 'NumMachine' et 'RaisonInter' sont des TextBox.
* 'LieuInter' et 'Dépositaire' et 'Réceptionneur' sont des ComboBox.
* 'DatePrisEnCharge' est un DateTimePicker.
merci a vous tous de bien vouloir prendre de votre temps pour m'aider.
Le numéro de machine est un int (IN_IDMAT) dans la base est ici tu lui donne un string ... Ca ne risque pas de marcher ...Code:
1
2 SqlParameter paramNMat = new SqlParameter("@NumMachine", SqlDbType.Decimal, 13); paramNMat.Value = NumMachine.Text;
Je suis désolé mais je voit pas trop ou tu vois que j'ai mit du string dans :J'ai mit :Code:
1
2 SqlParameter paramNMat = new SqlParameter("@NumMachine", SqlDbType.Decimal, 13); paramNMat.Value = NumMachine.Text;
car NumMachine est une textBox.Code:paramNMat.Value = NumMachine.Text
merci d'avance!!
réponse à rad_hass : Si j'ai regardé le .Value et ça me donné bien le Numéro de la machine.
réponse à MoscoBlade : J'avais déja modifiéenCode:paramNMat.Value = NumMachine.Text
mais c'est toujours pareil.Code:paramNMat.Value = int.Parse(NumMachine.Text)
J'ai mitau lieu deCode:MessageBox.Show(string.Format("{0}{1}{2}",ex.Message, ex.StackTrace));
et maintenant il m'affiche comme erreurCode:MessageBox.Show(ex.Message);
au lieu deCitation:
Une exception non gérée du type 'System.FormatException' s'est produite dans mscorlib.dll
Informations supplémentaires*: L'index (de base zéro) doit être supérieur ou égal à zéro et inférieur à la taille de la liste des arguments.
merci d'avance!!Citation:
L'objet doit implémenter IConvertible
tu peux nous refaire voir ton code (la requête SQL). ;)