Erreur : L'évaluation de l'expression à causé ...

shrek87 Messages postés 13 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 22 juin 2007 - 6 juin 2007 à 10:06
shrek87 Messages postés 13 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 22 juin 2007 - 11 juin 2007 à 09:17
Bonjour à tous,

Je dévellope une appli dans laquelle je me connecte à une base SQL Server pour récupérer des infos.
Ce qui est bizarre c'est que j'ai une fonction qui marche une fois sur deux et je n'arrive pas à voir d'où vient le problème.
Voilà mon code :

// Connexion open
// Definition de la requète SQL :                   cmdBD new SqlCommand (string.concat("Select * from Article where refCB ",textBoxCB.text),chaineConnexion);
// Déf du data reader : 
                  drConnBD = cmdBD.ExecuteReader(CommandBehavior.CloseConnection);
// Jusque là ca va.

                  if (drConnBD.Read())  
                           // |-----> c'est là que ca bloque ("drConnBD.read()"), une fois sur deux ca me mets le message d'erreur suivant : "l'évaluation de l'expression à causé un dépassement de capacité [name of function (if known) = ]"
                                           
                     textBoxNom = (string)drConnBD["Nom"];  // ca c'est bon aussi.
...

Si quelqu'un pouvait m'aider.
Merci.

8 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
6 juin 2007 à 10:26
Ca ne vient sans doute pas de ça, mais :

UTILISER DES REQUETES PARAMETREES !!!!!!!
cmdBD new SqlCommand (string.concat("Select * from Article where refCB @refCB"),chaineConnexion);

SqlParameterparam = cmdBD .Parameters.Add("@refCB", SqlDbType.Int);
param.Value = Integer.Parse("textBoxCB.text")

J'ai mis un paramètre de type int, libre à toi de le cahnger si ce n'est pas le cas.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 3
6 juin 2007 à 10:37
Salut,
SharpMao, ça ne serait pas plutôt :

param.Value = Integer.Parse(textBoxCB.Text)

(ça m'étonnerait que "textBoxCB.text" puisse se caster en int )

Un dépassement de capacité dans un .Read().... bizarre ça... Quel est le message d'erreur complet ? (avec la StackStrace)
A++

<hr width="100%" size="2" />Nurgle (Antoine) - MSP
0
shrek87 Messages postés 13 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 22 juin 2007
6 juin 2007 à 11:15
Re, merci pour vos réponse.
Le stack trace me donne :
      


à System.Data.SqlServerCe.SqlCeDataReader.ProcessResults()


à System.Data.SqlServerCe.SqlCeDataReader.IsEndOfRowset()


à System.Data.SqlServerCe.SqlCeDataReader.Move()


à System.Data.SqlServerCe.SqlCeDataReader.Read()


à testSQL.Form1.AfficherMan()


à testSQL.Form1.btnAfficher_Click()


à System.Windows.Forms.Control.OnClick()


à System.Windows.Forms.Button.OnClick()


à System.Windows.Forms.ButtonBase.WnProc()


à System.Windows.Forms.Control._InternalWnProc()


à Microsoft.AGL.Forms.EVL.EnterMainLoop()


à System.Windows.Forms.Application.Run()


à testSQL.Program.Main()

Voilà A++
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 60
6 juin 2007 à 12:39
Integer???
On ne fait pas de VB ici héhé  
Et en plus, mieux vaut utiliser tryparse que parse...

bool ok =
Int32.TryParse(myString,
out result);

<hr />
-Blog-
0

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

Posez votre question
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
6 juin 2007 à 12:50
Oui, bon d'accord, je vais me cacher ...

Désolé, ces derniers temps je code en VB, ferais mieux d'utiliser Int32, c'est valable en C# comme du côté obscure de la force.
Tu as bien entendu raison égalemement Nurgle.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 3
7 juin 2007 à 10:17
Oulà, j'ai même pas fait attention au Integer non plus  !
C'est un signe, je vais trop de VB :p


SqlCeDataReader, ça fait pas parti du framework ça, si tu as les sources tu peux aller regarder dans ProcessResults() (ou sinon avec Reflector)
A part ça, est ce que ta requête elle-même fonctionne ?

Mais un dépassement de capacité, en .NET, c'est pas possible ! Et en SQL, franchement je suis pas sûr...
Donc ce truc doit appeller du COM derrière ou un truc du genre, il faut aller voir dans ProcessResults(). Mais si en plus ça marche qu'une fois sur deux, de manière totalement aléatoire... ça va être difficile à résoudre.

A++



<hr width="100%" size="2" />
Nurgle (Antoine) - MSP
0
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
9 juin 2007 à 13:04
Salut,

Si si, c'est le provider ADO.NET standard pour SQL Server CE.

refCB est de quel type ?
Logiquement il devrait y avoir un code d'erreur avec le message, ça peut être plus parlant.
Quand tu dis que ça échoue une fois sur 2, tu parles d'une execution sur 2, ou d'une ligne du jeu de résultat sur 2 ?
Il faudrait voir la structure de la table, si elle comporte un grand nombre de colonnes / des colonnes volumineuses.
S'il y a des colonnes calculées etc.

/*
coq
MVP Visual C#
CoqBlog
*/
0
shrek87 Messages postés 13 Date d'inscription lundi 23 avril 2007 Statut Membre Dernière intervention 22 juin 2007
11 juin 2007 à 09:17
Salut, et merci de ta réponse coq.

Ma table n'a que 3 colonnes : RefCB, Désignation, Quantite
Elles sont toutes de type nvarchar, les valeurs nulles ne sont pas autorisée et refCB est unique mais pas clé primaire.

Il n'y a pas de code d'erreur avec le message.

La fonction marche avec certaines lignes de ma table.

Je ne sait vraiment pas quoi faire.
0