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