Bonjour.

Je ne suis pas très doué en Vb.net, mais j'ai déjà réussi à executer des requettes de type SELECT simple dans mon application.

Maintenant, je veux faire un SELECT avec des UNION.
J'ai donc repris la même méthode, juste changé le texte de la requette, mais là, j'ai l'impression que le contenu de la requette sql pose problème (requette valide sous l'analyseur de requette de Sql/Serveur), ou alors il y a quelque chose d'autre que je n'ai pas vu.

A l'execution, j'obtiens toujours le message super explicite : "SqlException" ! Je ne sais même pas comment récupérer plus d'informations sur le problème.

Quelqu'un pourrait-il m'éclairer sur le problème ?

Voici mon code :

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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
            sSql = sSql + "SELECT "
            sSql = sSql + "	NUM_MIA, dbo.F_TinyRefDeProduit3(dbo.TR_PRODUIT.PR_EPIC, dbo.TR_PRODUIT.PR_NUM_JCAE, dbo.TR_PRODUIT.PR_CLEF, 0, 1, 0, 0) AS CodeEquiMia "
            sSql = sSql + "            FROM "
            sSql = sSql + "	( "
            For iCpt = 0 To m_slScannes.Count - 1
                ' Parcours de la liste des bobines Mia scannées.
                If (iCpt = 0) Then
                    sSql = sSql + "SELECT '" + m_slScannes.Item(iCpt) + "' as NUM_MIA, " + CStr(iCpt) + " as ORDRE "
                Else
                    sSql = sSql + "UNION SELECT '" + m_slScannes.Item(iCpt) + "', " + CStr(iCpt) + " "
                End If
            Next
            sSql = sSql + "	) TOTO "
            sSql = sSql + "LEFT OUTER JOIN "
            sSql = sSql + "T_MIA ON (MI_NUM_MIA_K = TOTO.NUM_MIA) "
            sSql = sSql + "LEFT OUTER JOIN TR_CODE_PART ON MI_CP_CODE_PART_FK = CP_CODE_PART_K "
            sSql = sSql + "LEFT OUTER JOIN TR_PRODUIT ON CP_PR_ID_FK = PR_ID_K "
            sSql = sSql + "ORDER BY ORDRE "
 
            selectCMD = New SqlCommand(sSql, connection)
            selectCMD.CommandTimeout = 30
            daLeDataAdapter = New SqlDataAdapter
            daLeDataAdapter.SelectCommand = selectCMD
            connection.Open() ' Execution de la requette.
            dsLeDataSet = New DataSet
            Try
                daLeDataAdapter.Fill(dsLeDataSet, "LesMia") ' Erreur ici !
            Catch ex As Exception
                MonBeepKo()
                MessageBox.Show(ex.Message)
                result = -2
                connection.Close()
                Return result
            End Try
 
            ' Si la requette a réussi, alors chaque enregistrement du recordset retourné correspond à un scan de l'opérateur.
            For iCpt = 0 To dsLeDataSet.Tables("LesMia").Rows.Count - 1
                dRow = dsLeDataSet.Tables("LesMia").Rows(iCpt)
                iEmplacementEnCours = CType(m_slEmplacements.Item(iCpt), TObjetTrSimple).m_dIdK
                sRefPdc = CType(m_slEmplacements.Item(iCpt), TObjetTrSimple).m_sDesignation
                If (dRow.Item("CodeEquiMia") = String.Empty) Then
                    ' Bobine Mia non connue de Symtra.
                    aConstat = New TObjetTrSimple
                    aConstat.m_dIdK = 2
                    ' Structure du constat d'erreur n° 2 : 
                    ' Emplacement;NuméroMia;
                    aConstat.m_sDesignation = CStr(iEmplacementEnCours) + ";" + dRow.Item("NUM_MIA") + ";"
                    m_slConstatErreur.Add(CType(aConstat, Object))
                Else
                    ' Bobine Mia connue de Symtra.
                    sRefReelle = dRow.Item("CodeEquiMia")
                    If (sRefPdc.ToUpper.Trim <> sRefReelle.ToUpper.Trim) Then
                        ' Mauvaise référence à l'emplacement concerné.
                        aConstat = New TObjetTrSimple
                        aConstat.m_dIdK = 1
                        ' Structure du constat d'erreur n° 1 : 
                        ' Emplacement;NuméroMia;RéférenceAttendue;RéférenceConstatée;
                        aConstat.m_sDesignation = CStr(iEmplacementEnCours) + ";" + dRow.Item("NUM_MIA") + ";"
                        aConstat.m_sDesignation = aConstat.m_sDesignation + sRefPdc + ";" + sRefReelle + ";"
                        m_slConstatErreur.Add(CType(aConstat, Object))
                    End If
                End If
            Next
            connection.Close()