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

Signaler
Messages postés
13
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
22 juin 2007
-
Messages postés
13
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
22 juin 2007
-
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

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
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)
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
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
Messages postés
13
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
22 juin 2007

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++
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
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-
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
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)
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
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
*/
Messages postés
13
Date d'inscription
lundi 23 avril 2007
Statut
Membre
Dernière intervention
22 juin 2007

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.