Bonjour ,
J'ai dans une Form, une ComboBox qui, lors d'un clic sur celle ci, effectue une requête pouvant s'avérer longue. C'est pourquoi j'aimerais passer la main à l'UI le temps que cette requête s'effectue. J'ai essayé d'utilisé Async et Await mais impossible de trouver la bonne combinaison, sachant que j'ai comme erreur "Impossible d'attendre ADODB.Recordset" .
Voici mon code en synchrone :
-Code du trigger sur la CB :
Et voici le code de la fonction ReqBDD :
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 private void CBBat_DropDown(object sender, EventArgs e) { String requete; String connect; ADODB.Recordset rs = new ADODB.Recordset(); if (this.CBBat.Items.Count == 0) { connect = "chaine de connexion"; requete = "Ma requete"; try { rs = ReqBDD(connect, requete, 15); if (rs.EOF == false) { rs.MoveFirst(); while (rs.EOF == false) { if ((Convert.ToString(rs.Fields["Champ1"].Value)) != String.Empty) { this.CBBat.Items.Add(rs.Fields["Champ1"].Value); } rs.MoveNext(); } } rs.Close(); } catch { MessageBox.Show("erreur"); } } }
L'idée est d'exécuter la fonction ReqBDD de manière asynchrone, comment pourrais-je adapter ce code avec Async et Await ?
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 private ADODB.Recordset ReqBDD(String connect, String requete, int TimeOut)//Fonction ReqBDD { ADODB.Recordset rs = new ADODB.Recordset(); try { ADODB.Connection cn = new ADODB.Connection(); cn.ConnectionString = connect; cn.ConnectionTimeout = TimeOut; cn.CommandTimeout = TimeOut; cn.Open(connect, "", "", -1); rs.ActiveConnection = cn; rs.Open(requete, cn, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockBatchOptimistic, 1); } catch (Exception ex) { MessageBox.Show("Erreur SQL avec l'exception : " + ex); } return rs; }
Merci d'avance et bonne journée.
Partager