Messieurs, Dames Bon! Jour!
J'ai un souci, je sais c'est courant par ici...?
Alors voila, si vous pouvez m'aider c'est cool.
J'ai une requete SQL à executer sur un SQL Server 2008.
J'utilise Visual Studio 2010 en VB.NET
Dans le cas suivant SQL DataAdapter je concatene ma requete avec mes valeurs "string" et tout va bien. Formidable me direz vous.
'PREMIER CAS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
Sql_adapter = my_sql.myDAdapter(Query_TTx_err_1s7 & "'" & Mag.Numero & "'" & _
Query_TTx_err_2s7 & "'" & date_debut & "'" & _
Query_TTx_err_3s7 & "'" & date_fin & "'" & _
Query_TTx_err_4s7 & _
Query_TTx_err_5s7 & ttx_min & _
Query_TTx_err_6s7 & ttx_max & _
Query_TTx_err_7s7)
'Avec Espion voici à quoi la requête complète ressemble.
"SELECT DATE_J, NB_TICKET, ENTREES, ((NB_TICKET*100)/entrees) as TTx
FROM [TTx].[dbo].[v_detail_agreg]
WHERE (NUMMAG = '0157')
AND (DATE_J BETWEEN '1-7-2010' AND '1-8-2010')
AND (ENTREES <> 0)
AND (NB_TICKET <> 0)
AND (((NB_TICKET * 100)/ENTREES) NOT BETWEEN 15 AND 45)
ORDER BY DATE_J;" |
Mais voila j'ai voulu faire mieux et il parait que c'est l'ennemi du bien mais quand même le propreté n'a jamais tué personne... à ma connaissance en tout cas.
J'ai donc voulu utiliser une requête paramétré... comme suit.
'DEUXIEME CAS
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
|
Sql_adapter = my_sql.myDAdapter(query_ttx)
'Avec espion voila le requête
"SELECT DATE_J, NB_TICKET, ENTREES, ((NB_TICKET*100)/ENTREES) as TTx
FROM [TTx].[dbo].[v_detail_agreg]
WHERE (NUMMAG = @nummag)
AND DATE_J BETWEEN @date_deb AND @date_fin
AND ENTREES <> 0
AND ((NB_TICKET * 100) / ENTREES) NOT BETWEEN @ttx_min AND @ttx_max
AND NB_TICKET <> 0
ORDER BY DATE_J;"
'Puis je passe mes valeur d'argument
With Sql_adapter.SelectCommand.Parameters
.Add(New SqlParameter("@nummag", SqlDbType.Char))
.Add(New SqlParameter("@date_deb", SqlDbType.Date))
.Add(New SqlParameter("@date_fin", SqlDbType.Date))
.Add(New SqlParameter("@ttx_min", SqlDbType.Int))
.Add(New SqlParameter("@ttx_max", SqlDbType.Int))
End With
With Sql_adapter.SelectCommand
.Parameters("@nummag").Value = Mag.Numero
.Parameters("@date_deb").Value = date_debut 'Convert.ToDateTime(date_debut)
.Parameters("@date_fin").Value = date_fin 'Convert.ToDateTime(date_fin)
.Parameters("@ttx_min").Value = ttx_min 'CInt(ttx_min)
.Parameters("@ttx_max").Value = ttx_max 'CInt(ttx_max)
End With |
Enfin je "Fill" mon DataSet "my_Ds"
Dans le premier cas Ho stupeur ca marche très bien!!!
Dans le 2eme cas!!! Division par ZERO Error! (J'ai bien entendu vérifié en pas à pas si les valeurs des paramètres étaient identique et elles le sont!)
Sql_adapter.Fill(my_Ds, "V_Detail_Agreg")
Si quelqu'un a une idée? Une solution ou une incantation quelconque qu'il n’hésite pas à me dire comment ou pourquoi ou peut autre chose???
PS:ça fait 3 jour que je tourne la requête dans tous les sens, les commandes et les paramètres dans différent type, différentes forme et rien n'y fait! La première "SALE" marche et la deuxième "('"("propre")"')" répond Division par ZERO!
Bonne journée à tous et Merci
Tibo
Partager