Passer un array en parametre

joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014 - 26 mars 2014 à 20:33
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 27 mars 2014 à 12:35
Bonjour,

mon problème est que je dois passer un array (ensemble de valeurs de type string récupérés depuis un datagridview) en paramètre dans un requête sql (numéro pièce in array), mais ça ne marche pas du coté de la requête.voici le code que j'utilise :

***récupération des valeurs depuis un datagridview

Dim array As New ArrayList
        For x As Integer = 0 To DataGridView2.Rows.Count - 1
            arrayt.Add(DataGridView2.Rows(x).Cells(1).Value)
        Next
        ' convert Arraylist to a string array.
        Dim strStrings() As String = array.ToArray(GetType(String))
        Dim strJoinedString As String
        ' join the strings
        strJoinedString = Join(strStrings, ",") 


***requête sql :

Dim cmd As New SqlCommand("SELECT F_DOCLIGNE.AR_Ref,SUM(DL_Qte),Emplacement,F_DOCLIGNE.DL_Design,F_DOCLIGNE.CT_Num FROM F_DOCLIGNE LEFT JOIN F_ARTICLE on F_ARTICLE.cbAR_Ref=F_DOCLIGNE.cbAR_Ref where DO_Piece IN '" & ("'" & strJoinedString & "'") & "' AND DL_Design <> 'BON URGENT' AND (F_Docligne.DO_Type='12') GROUP BY F_Docligne.Ar_Ref,emplacement,F_DOCLIGNE.DL_Design,F_DOCLIGNE.CT_Num", cnx)
                
                cmd.Parameters.Add("@NumPiece", SqlDbType.varchar)
                cmd.Parameters("@NumPiece").Value = strJoinedString 
                reader = cmd.ExecuteReader()
                timeout = cmd.CommandTimeout


merci pour votre aide
--

7 réponses

Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
26 mars 2014 à 20:46
Bonsoir, je suis mauvais en VB et encore plus en SQL.

Mais ta question est
mon problème est que je dois passer un array ... en paramètre dans un requête sql

et ton code fait:
        Dim strJoinedString As String
        ' join the strings
        strJoinedString = Join(strStrings, ",")

donc au final c'est un string que tu passes en paramètre.

J'en perds mon latin...
0
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
26 mars 2014 à 21:19
je parcours mon array et je stocke ces éléments dans une variable de type string (conversion d'un array à string) :
Dim strStrings() As String = array.ToArray(GetType(String))
et c'est ainsi que le paramètre passé est un string

--
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
26 mars 2014 à 21:45
OK là on est d'accord.
Donc ta vraie question c'est quoi?
0
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
26 mars 2014 à 22:55
la requête m'affiche un message d'erreur du coté du paramètre en faite ce paramètre doit avoir comme forme ('XXXX','YYYY','ZZZ') mais lorsque je fais des concaténations avant de passer ce dernier un bug s'affiche du coté de la requête sql

--
0

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

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
26 mars 2014 à 23:49
Bonjour
Où utilise tu @NumPiece dans ta requete ?
Utilise plutot un list of string qu'un arraylist
0
joujma5 Messages postés 152 Date d'inscription samedi 11 novembre 2006 Statut Membre Dernière intervention 5 décembre 2014
27 mars 2014 à 07:16
bonjour
peu tu m'expliquer d'avantage , en faite j'ai utilisé @numpiece en premier lieu dans la clause where (DO_Piece IN '" & ("'" & strJoinedString & "'") & "') pour remplacer strJoinedString.

--
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 27/03/2014 à 11:20
le @NumPiece est le parametre

tu peux obtenir ton strJoinedString ainsi
Private Function GetJoinStr() As String
Dim joinstr As String = String.Empty
For i = 0 To DataGridView1.Rows.Count - 2
'à la place de column1 le nom de ta colonne
joinstr &= DataGridView1.Rows(i).Cells("column1").Value & ","
Next
'on supprime la derniere virgule
joinstr = joinstr.Substring(0, joinstr.Length - 1)
Return joinstr
End Function

n'écris pas ta requete de 10 metres sur une seule ligne

Dim query As String
query = "SELECT F_DOCLIGNE.AR_Ref,SUM(DL_Qte),Emplacement,F_DOCLIGNE.DL_Design,F_DOCLIGNE.CT_Num _ FROM F_DOCLIGNE "
query &= " LEFT JOIN F_ARTICLE on F_ARTICLE.cbAR_Ref=F_DOCLIGNE.cbAR_Ref "
query &= " where DO_Piece IN (@NumPiece) AND DL_Design <> 'BON URGENT' "
query &= "AND (F_Docligne.DO_Type='12') GROUP BY F_Docligne.Ar_Ref,emplacement,F_DOCLIGNE.DL_Design,F_DOCLIGNE.CT_Num"

Dim cmd As New SqlCommand(query, cnx)
cmd.Parameters.Add("@NumPiece", SqlDbType.VarChar)
cmd.Parameters("@NumPiece").Value = GetJoinStr()
cmd.ExecuteReader()

est ce cnx est déclaré et initié ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
27 mars 2014 à 12:35
petite correction
à la place de
 joinstr &= DataGridView1.Rows(i).Cells("column1").Value & ","
il faut
 joinstr &= DataGridView1.Rows(i).Cells("column1").Value.tostring & ","
0
Rejoignez-nous