Difference SqlAdpter SqlCommand

cs_dormilon Messages postés 9 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 17 juin 2009 - 11 juin 2009 à 21:00
cs_dormilon Messages postés 9 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 17 juin 2009 - 13 juin 2009 à 19:24
Bonjour à tous,

Mon problème est le suivant quand je veux insérer un float dans ma base SQL Server avec les objets DataAdapter+DataTable j'ai une imprécision de 0,000005 donc pour la valeur 313.12 -> 313.119995117188
Par contre avec les objets SqlCommand + SqlParameter je n'ai pas ce problème.

Si vous avez une idée , une doc ou autre je suis preneur, ça fait 2 jours que je suis dessus

Merci

5 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
11 juin 2009 à 23:21
Salut,

Quelles sont les types de données que tu manipules

Decimal --> Precision precise
Float et Single --> Calcul flottant donc non precis

Dans ta base de données
c'est pareil
Numeric(9,2) eq decimal(9,2) il me semble

Real(9.2) et float(9, 2) en virgule flottante

esperant que ca te guide

si tu as la reponse exact je suis preneur
de l'incoherence en les 2 systemes (connecté et déconnecté)
0
cs_dormilon Messages postés 9 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 17 juin 2009
12 juin 2009 à 09:11
merci pour ta réponse et je travaille avec des float des aussi bien pour la base que dans mon programme. Je me doutais qu'il y allait avoir une imprécision mais pas aussi grande.

J'ai fait un petit profiling avec SqlServerProfiling et la c'est encore plus incompréhensible.

Requete avec le SqlDataAdapter:
exec sp_executesql N'INSERT INTO [Table1] ([time], [value]) VALUES (@p1, @p2)',N'@p1 datetime,@p2 float',@p1='Jun 10 2009  3:06:39:397PM',@p2=319.20

Requete avec le SqlParameter:
exec sp_executesql N'insert into Table1(time, value) VALUES (@p1, @p2)',N'@p1
datetime,@p2 float',@p1='Jun 10 2009  6:15:03:327PM',@p2=319.20

La je craque, je comprends plus rien du tout
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
12 juin 2009 à 23:18
Le probleme est que la precision doit etre differente.

Exemple

Ta base est cree avec float(n) ou float qui equivaut a float(53) 
Ton sqlparametre est parametre avec une precision à 10 par exemple par defaut

et donc ici tu as des insertions différentes .

C'est une supposition 
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
13 juin 2009 à 16:25
bonjour
j'aurais tendance à dire comme toi nhervagault, mais ce qui me laisse songeur c'est les traces du profiler.
2 traces identiques donnant un résultat different ???
Si c'était un problem de précision sur le type des parametres on devrait le voir sur la trace hors ce n'est pas le cas.
je reste perplexe.

C# is amazing, enjoy it!
0

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

Posez votre question
cs_dormilon Messages postés 9 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 17 juin 2009
13 juin 2009 à 19:24
bonjour,

nhervagault tu m'as donné une idée, j'ai donc modifié le type de mon DataColumn en le passant à decimal et j'ai maintenant les meme valeurs qu'avec le SqlParameter. Par contre le profiler me donne tjs la meme requête, certainement du au faite que SqlDataAdapter va récupérer les type avant d'envoyer les requetes.

Je vais donc regarder comment fonctionne le SqlDataAdapter pour voir comment il gere les types des colonnes.

C'est vraiment dommage qu'on ne puisse pas faire du debug (pas à pas) dans le code de microsoft, ça aurai été plus rapide

 
0
Rejoignez-nous