Bonjour à tous,
J'ai un petit souci avec des requêtes paramétrées dans un programme lorsque j'utilise une clause WHERE IN dans la requête...
Si j'écris ma requête avec paramètres, je ne récupère qu'un seul résultat au lieu des N résultats demandés :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM blabla WHERE Critere IN (@Valeurs)Et miracle, je ne récupère qu'une seule ligne de résultat au lieu des n que devrait me retourner la requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Try Dim ds As New DataSet("Pieces") ds.Tables.Add("ArticlesVendus") Dim strListeSaisie As String = "125, 127" ' Création du DataAdapter via une classe externe Dim db As IDbDataAdapter = DB2Tools.CreateAdapter(My.Resources.Articles.ParNumSaisieSAV) db.TableMappings.Add("Table", "ArticlesVendus") ' Ajout du paramètre à la commande via la classe utilitaire DB2Tools.AddParameter(db.SelectCommand, "Saisies", strListeSaisies) db.Fill(ds) Catch ex As Exception Throw New PiecesFactoryException( String.Format("Erreur du moteur de base de données ({0})", ex.Message), ex) End Try
Si j'utilise la requête avec String.Format, ça me renvoie le bon nombre de lignes....
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM blabla WHERE Critere IN ({0})Et pour info, le code de la méthode AddParameter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Dim ds As New DataSet("Pieces") ds.Tables.Add("ArticlesVendus") Dim strListeSaisie As String = "125, 127" ' Création du DataAdapter via une classe externe en formattant directement la requête Dim db As IDbDataAdapter = DB2Tools.CreateAdapter( String.Format(My.Resources.Articles.ParNumSaisieSAV, strListeSaisie)) db.TableMappings.Add("Table", "ArticlesVendus")
Je sèche... Et comme les paramètres, c'est mieux, ben ça m'emmerde, et j'aimerais bien savoir comment qu'on fait pour utiliser les paramètres avec la clause IN...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Public Shared Sub AddParameter(ByRef cmd As IDbCommand, ByVal name As String, ByVal value As Object) Dim pa As IDataParameter = cmd.CreateParameter() pa.ParameterName = name pa.Value = value cmd.Parameters.Add(pa) End Sub
Merci d'avance pour vos réponses...
PS. J'espère que c'est le bon forum (je ne sais pas d'où vient mon problème en fait... ADO.NET ou le provider .NET du SGDBR (IBM.Data.DB2.iSeries))
Partager